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

Python 如何在内部类中调用上层类的变量?,python,class,inner-classes,Python,Class,Inner Classes,我必须调用一个在上层类定义的变量到内部类 代码 错误消息 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 attri

我必须调用一个在上层类定义的变量到内部类

代码

错误消息

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'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第4行,在_init中__
文件“”,第7行,在_init中__
AttributeError:类型对象“outer”没有属性“Out”
  • 要创建
    内部类的新实例
    ,您应该在前面加上
    外部
    类名,即
    外部.Inner()
  • 在引用类之前,应该定义
    内部
  • Outer.\uuuu init\uuuu
    中,您可以将容器对象传递到
    内部类
    的创建实例中,即
    外部.Inner(self)
    ,该实例将作为
    内部方法中的参数
    外部
    传递
类外部:
类内部:
定义初始值(自身、外部):
self.in\u out=外部。\u out
打印(自进自出)
定义初始化(自):
self.\u out='out'
self.\u in=外部.内部(self)
c=外部()

在您的情况下,
outer.Out
是在实例上下文(
self.Out
)中启动类属性时,尝试访问类属性(在类上下文中)。这是两种不同的情况

如果您仍然需要定义一个可以访问父类实例的嵌套类-将
外部
实例传递给内部
内部
构造函数作为参考:

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

Out
outer
的实例属性
internal
没有从中获取属性的
outer
实例:您试图从没有属性的类中读取属性。您可以将其传递到
内部
的init方法中。不太清楚你的目标是什么,也不清楚为什么一个类在另一个类中。而且类应该以大写字母开头。属性不应该。可以通过上述方法解决。虽然我不需要定义嵌套类,但仍然有相同的错误。这是否意味着我发布的代码应该从内部类移到外部类的上方?@NokiLee,应该可以。您使用的python版本是什么?这是python 3.7.4。很抱歉,当我没有使用嵌套类时,我忘了编写父类。@Samha',你错了-
c.In.InOut
不明显被称为“静态上下文”@RomanPerekhrest你是对的,我因为在CAPS中使用变量而感到困惑。这里是最后一个自引用。
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