我必须将上层定义的变量调用到内部类。
代码
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
类名,即 Outer.Inner()
。Inner
类之前定义它。Outer.__init__
中,您可以将容器对象传递到创建的Inner class
实例中,即Outer.Inner(self)
,它将作为参数outer
在Inner.__init__
方法中传递。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
是尝试访问类属性(在类上下文中),而该属性是在实例上下文中启动的(self.Out
)。这是 2 个不同的上下文。
如果您仍然需要定义一个可以访问父类实例的嵌套类 - 将
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