我正在阅读有关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']
Run Code Online (Sandbox Code Playgroud)
为什么在该类的bus1实例上调用add_passenger()会更改bus2的乘客集?
当您不希望这种行为时,正确的方法是什么?
为什么在该类的bus1实例上调用add_passenger()会更改bus2的乘客集?
因为是没有“乘客集的bus2 ”(没有乘客设置的bus1)。在此代码中:
class Bus(object):
passengers = set()
Run Code Online (Sandbox Code Playgroud)
...... passengers是这是此类的所有实例共享一个类变量,但属于没有这些情况,但对类本身,所以当你改变self.passengers,你居然改变Bus.passengers,并且由于bus1.passengers和bus2.passengers 指 Bus.passengers,bus1.passengers == bus2.passengers始终是真实的。
如果您不希望这种行为,请实现一个__init__方法:
class Bus:
def __init__(self):
self.passengers = set()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |