python - 全局变量如何/为什么可用/在嵌套类实例的范围内,但 "nonlocal"变量不可用?

标签 python python-3.x class inheritance nested

如何以与访问全局变量类似的方式访问 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/

相关文章:

python - 如何在 Google 应用引擎上使用 gcloud?

python-3.x - 如何在 selenium python 中按回车键?

python-3.x - 如何在 Python3 中从图像中删除矩形形状,保留文本?

python - 从 Python 类获取特定方法子集

c++ - 为什么全局变量在另一个源文件中被类初始化?

python - 子进程无法使用复杂的 Unix 命令

Python REGEX 匹配带回车的多行

Python数据框获取特定行占总行的比率

Python程序写入另一个python程序?

c++ - 将自己的类的实例传递给另一个