为什么__init __(self)会更改给定类的功能?

时间:2018-10-12 11:52:56

标签: python oop

第一个代码未使用__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中的下划线也有什么区别吗?

0 个答案:

没有答案