3 回答
TA贡献1835条经验 获得超7个赞
class Outer(object):
outer_var = 1
class Inner(object):
@property
def inner_var(self):
return Outer.outer_var
这与其他语言中的类似功能不太一样,并使用全局查找而不是限制对的访问outer_var。(如果更改名称Outer绑定到的对象,则此代码将在下次执行该对象时使用该对象。)
相反,如果您希望所有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,如果你想要的。)
TA贡献1783条经验 获得超4个赞
如果您不使用嵌套类,则可能会更好。如果必须嵌套,请尝试以下操作:
x = 1
class OuterClass:
outer_var = x
class InnerClass:
inner_var = x
或者在嵌套它们之前声明两个类:
class OuterClass:
outer_var = 1
class InnerClass:
inner_var = OuterClass.outer_var
OuterClass.InnerClass = InnerClass
(在此之后,您可以del InnerClass根据需要。)
添加回答
举报