gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:02:37 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com