第一个代码未使用__init__(self)
方法。
from itertools import cycle
class Lamp:
colors = cycle(['Green', 'Red', 'Blue', 'Yellow'])
def light(self):
return next(self.colors)
现在第二个示例使用__init__(self)
方法,并将colors变量声明为self._colors
:
from itertools import cycle
class Lamp:
def __init__(self):
self._colors = cycle(['Green', 'Red', 'Blue', 'Yellow'])
def light(self):
return next(self._colors)
虽然运行测试的两个类的行为不同,但是当创建另一个对象时,第一类并不是从循环的起点开始的,而第二个类却不是:
lamp_1 = Lamp()
lamp_2 = Lamp()
print(lamp_1.light())
print(lamp_1.light())
print(lamp_2.light()) # different lamp
print(lamp_1.light())
我不明白为什么the __init__(self)
在这种情况下会更改功能。与仅self._colors
相比,self.colors
中的下划线也有什么区别吗?