我正在尝试了解 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/