内层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