gpt4 book ai didi

python - 嵌套类的范围?

转载 作者:IT老高 更新时间:2023-10-28 21:05:49 40 4
gpt4 key购买 nike

我正在尝试了解 Python 中嵌套类的范围。这是我的示例代码:

class OuterClass:
outer_var = 1
class InnerClass:
inner_var = outer_var

类的创建没有完成,我得到了错误:

<type 'exceptions.NameError'>: name 'outer_var' is not defined

尝试 inner_var = Outerclass.outer_var 不起作用。我明白了:

<type 'exceptions.NameError'>: name 'OuterClass' is not defined

我正在尝试从 InnerClass 访问静态 outer_var

有没有办法做到这一点?

最佳答案

class Outer(object):
outer_var = 1

class Inner(object):
@property
def inner_var(self):
return Outer.outer_var

这与其他语言中的类似事情不太一样,并且使用全局查找而不是限定对 outer_var 的访问范围。 (如果您更改名称 Outer 绑定(bind)到的对象,则此代码将在下次执行时使用该对象。)

如果您希望所有 Inner 对象都具有对 Outer 的引用,因为 outer_var 实际上是一个实例属性:

class Outer(object):
def __init__(self):
self.outer_var = 1

def get_inner(self):
return self.Inner(self)
# "self.Inner" is because Inner is a class attribute of this class
# "Outer.Inner" would also work, or move Inner to global scope
# and then just use "Inner"

class Inner(object):
def __init__(self, outer):
self.outer = outer

@property
def inner_var(self):
return self.outer.outer_var

请注意,嵌套类在 Python 中并不常见,并且不会自动暗示类之间存在任何类型的特殊关系。你最好不要嵌套。 (如果需要,您仍然可以将 Outer 上的类属性设置为 Inner。)

关于python - 嵌套类的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1765677/

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