我在读this article关于Python函数式编程(3)
但是我不明白文中的这个例子:
class Bus(object):
passengers = set()
def add_passenger(self, person):
self.passengers.add(person)
bus1 = Bus()
bus2 = Bus()
bus1.add_passenger('abe')
bus2.add_passenger('bertha')
bus1.passengers # returns ['abe', 'bertha']
bus2.passengers # also ['abe', 'bertha']
为什么在类的bus1实例上调用add\u passenger()会改变bus2的乘客集
当你不想要这种行为时,正确的方法是什么
因为没有
bus2
的乘客组(也没有bus1
的乘客组)。在本规范中:…>引用了
passengers
是一个在这个类的所有实例之间共享的类变量,但是不属于这些实例,而是属于类本身,因此当您更改self.passengers
时,实际上更改了Bus.passengers
,并且由于bus1.passengers
和^{Bus.passengers
,因此bus1.passengers == bus2.passengers
总是正确的如果不希望出现这种行为,请实现
__init__
方法:相关问题 更多 >
编程相关推荐