如何在内部类中调用上层类的变量?

问题描述 投票:0回答:2

我必须将上层定义的变量调用到内部类。

代码

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'
python class inner-classes
2个回答
1
投票
  • 要创建
    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()

0
投票

在您的情况下,

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
© www.soinside.com 2019 - 2024. All rights reserved.