以下代码:
class House:
links = []
class Link:
pass
class Villa(House):
pass
if __name__ == '__main__':
house = House()
villa = Villa()
link = Link()
house.links.append(link)
print house.links
print villa.links
输出结果:
^{pr2}$我觉得这很奇怪:既然是另一个例子?-我本以为输出是-因为它是另一个实例?公司名称:
[<__main__.Link instance at 0xb65a4b0c>]
[]
当将house.links.append(link)
更改为house.links = [link]
时,一切正常。在
有人能解释一下这种行为吗?在
在您的代码中,
links
是类的一个属性,使该类的所有实例共享它:因此,}的实例。在
Villa
类共享此属性,因为Villa
的实例(作为子类)也是{如果您想使
^{pr2}$links
成为实例变量,请编写一个构造函数并将links
设置为self
的属性,例如这是另一个实例,但是您已经将
links
定义为类变量而不是实例变量。在实例变量的定义如下:
注意,在Python中,与其他语言不同,实例变量被显式声明为实例的属性。这通常发生在
__init__
方法中,以确保每个实例都有变量。在然后,子类如下所示:
^{pr2}$执行代码会得到正确的结果:
相关问题 更多 >
编程相关推荐