请考虑以下代码段:
def populate(l):
l.append(1)
class First:
__obj__ = []
class Second(First):
populate(First.__obj__)
def __init__(self):
pass
def __call__(self):
for i in Second.__obj__:
print(i)
a = Second()
a()
运行时,它将输出1
,因此看来First.__obj___
和Second.__obj__
指向同一个对象。是真的吗?在继承的情况下,类属性如何工作?
答案 0 :(得分:0)
名称__obj__
是First
类的属性。因为Second
类继承了First
类,所以它也继承了类属性__obj__
。 First.__obj__
和Second.__obj__
都引用相同的list
对象。实例的self.__obj__
也引用相同的对象。
这是因为list
是可变的。对于像str
这样的不可变类型,情况并非如此。