如何以与访问全局变量类似的方式访问 OuterClass
变量?
例如:
global_variable = 'global_variable'
class InnerClass:
def __init__(self):
pass
def test(self):
return super().variable
def test_global(self):
return global_variable
class OuterClass:
def __init__(self, inner_class_instance):
self.variable = 'class_variable'
self.inner_class_instance = inner_class_instance
运行以下命令返回全局变量:
inner = InnerClass()
outer = OuterClass(inner)
outer.inner_class_instance.test_global()
但是尝试访问 nonlocal
类变量会导致 AttributeError
:
outer.inner_class_instance.test()
super()
在 InnerClass.test
中被错误使用,因为 OuterClass
不是 InnerClass
的基类.如何以与访问全局变量类似的方式访问 OuterClass
变量?这没有将上下文参数传递给 InnerClass
。在 InnerClass.test
中使用 nonlocal variable
导致了 SyntaxError
。
此外,如何以及为什么可以从 InnerClass.test
访问全局变量?
最佳答案
在test(self)
InnerClass
的方法| ,您错误地理解了表达式 super().variable
的含义. super()
这里指的是 InnerClass
的父类(super class),它(即使在代码中没有显式)恰好是名为 Object
的预定义类.和 Object
类当然没有名为 variable
的属性.这就是该行抛出错误的原因
'super' object has no attribute 'variable'
您的另一个问题是——“如何访问 OuterClass
变量?”。
我想先澄清一下这里概念的一些基本方面。
首先,你里面的那个东西InnerClass
,名称为 variable
, 实际上是 InnerClass
的一个属性 .因此,我宁愿将您的问题重新表述为“如何从 OuterClass
的方法中访问 InnerClass
属性?”。
其次,仅仅因为OuterClass
收到对 InnerClass
实例的引用当__init__()
OuterClass
的方法|执行,并不意味着 OuterClass
在任何方面都是“外部”或“周围”InnerClass
.
从InnerClass
中的代码来看, OuterClass
只是另一个类,没有特殊地位——它既不是父类(super class)(祖先类)也不是外部类(周围类)。因此,访问 OuterClass
实例的属性, 来自 InnerClass
方法称为 test()
,您首先需要一个包含对 OuterClass
的引用的名称实例。因此,例如,在 test()
中方法,如果您碰巧有一个名为 my_outer_inst
的名字包含对 OuterClass
实例的引用, 你当然可以引用 OuterClass
名为 variable
的属性, 使用 my_outer_inst.variable
.
关于python - 全局变量如何/为什么可用/在嵌套类实例的范围内,但 "nonlocal"变量不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55074314/