内层class如何调用上层class的变量?
How to call variable of the upper class in inner class?
我必须调用定义在上层class的变量到内部class。
代码
class outer:
def __init__(self):
self.Out = 'out'
self.In = self.inner()
class inner:
def __init__(self):
self.InOut = outer.Out
c = outer()
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
File "<stdin>", line 7, in __init__
AttributeError: type object 'outer' has no attribute 'Out'
- 要创建
Inner class
的新实例,您应该在前面加上 Outer
class 名称,即 Outer.Inner()
.
- 你应该在引用它之前定义
Inner
class。
- 在
Outer.__init__
中,你可以将容器对象传递给Inner class
的创建实例,即Outer.Inner(self)
,它将作为参数outer
在[=中传递19=]方法。
class Outer:
class Inner:
def __init__(self, outer):
self.in_out = outer._out
print(self.in_out)
def __init__(self):
self._out = 'out'
self._in = Outer.Inner(self)
c = Outer()
在您的情况下,outer.Out
是尝试访问 class 属性(在 class 上下文中),而该属性是在实例上下文 (self.Out
) 中启动的。这是 2 个不同的上下文。
如果您仍然需要定义一个嵌套的 class,它可以访问父 class 实例 - 将 Outer
实例传递给内部 Inner
构造函数作为参考:
class Outer:
class Inner:
def __init__(self, parent):
self.InOut = 'inner ' + parent.Out
def __init__(self):
self.Out = 'out'
self.In = Outer.Inner(self)
c = Outer()
print(c.In.InOut) # inner out
我必须调用定义在上层class的变量到内部class。
代码
class outer:
def __init__(self):
self.Out = 'out'
self.In = self.inner()
class inner:
def __init__(self):
self.InOut = outer.Out
c = outer()
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
File "<stdin>", line 7, in __init__
AttributeError: type object 'outer' has no attribute 'Out'
- 要创建
Inner class
的新实例,您应该在前面加上Outer
class 名称,即Outer.Inner()
. - 你应该在引用它之前定义
Inner
class。 - 在
Outer.__init__
中,你可以将容器对象传递给Inner class
的创建实例,即Outer.Inner(self)
,它将作为参数outer
在[=中传递19=]方法。
class Outer:
class Inner:
def __init__(self, outer):
self.in_out = outer._out
print(self.in_out)
def __init__(self):
self._out = 'out'
self._in = Outer.Inner(self)
c = Outer()
在您的情况下,outer.Out
是尝试访问 class 属性(在 class 上下文中),而该属性是在实例上下文 (self.Out
) 中启动的。这是 2 个不同的上下文。
如果您仍然需要定义一个嵌套的 class,它可以访问父 class 实例 - 将 Outer
实例传递给内部 Inner
构造函数作为参考:
class Outer:
class Inner:
def __init__(self, parent):
self.InOut = 'inner ' + parent.Out
def __init__(self):
self.Out = 'out'
self.In = Outer.Inner(self)
c = Outer()
print(c.In.InOut) # inner out