Python 阻止列表在父类中处于静态状态
我有以下代码Python 阻止列表在父类中处于静态状态,python,list,inheritance,Python,List,Inheritance,我有以下代码 class device(object): triggerphrases=[] visActive=False def addTrigger(self,phrase): self.triggerphrases.extend([phrase]) def SetActive(self,On): self.visActive=On def isActive(self): return self.visActive cla
class device(object):
triggerphrases=[]
visActive=False
def addTrigger(self,phrase):
self.triggerphrases.extend([phrase])
def SetActive(self,On):
self.visActive=On
def isActive(self):
return self.visActive
class light(device):
def setPhrase(self):
super().addTrigger("living room light")
def printPhrases(self):
print(super().triggerphrases)
class colouredLight(device):
def setPhrase(self):
super().addTrigger("coloured light")
def printPhrases(self):
print(super().triggerphrases)
firstlight=light()
firstlight.setPhrase()
firstlight.SetActive(True)
print(firstlight.isActive())
secondlight=colouredLight()
secondlight.setPhrase()
secondlight.printPhrases()
print(secondlight.isActive())
奇怪的是,visactive与实例相关联,当TriggerThrases静态动作时,我得到的输出是
True
['living room light', 'coloured light']
False
我希望发生的是,列表与实例绑定,因此一个对象将返回[“客厅灯光”],另一个[“彩色灯光”]。我知道我可以在子类级别保存列表,但这会破坏将代码放在一个位置的目标。这是一个简化的版本-真实的东西将有许多不同的设备。在父类上创建一个
\uuuu init\uuuu
,并将变量移到内部,使其成为实例变量:
class device(object):
def __init__(self):
self.triggerphrases = []
self.visActive = False
def addTrigger(self, phrase):
self.triggerphrases.extend([phrase])
def SetActive(self, On):
self.visActive = On
def isActive(self):
return self.visActive
class light(device):
def setPhrase(self):
super().addTrigger("living room light")
def printPhrases(self):
return self.triggerphrases
class colouredLight(device):
def setPhrase(self):
super().addTrigger("coloured light")
def printPhrases(self):
return self.triggerphrases
firstlight = light()
firstlight.setPhrase()
firstlight.SetActive(True)
print(firstlight.printPhrases())
print(firstlight.isActive())
secondlight = colouredLight()
secondlight.setPhrase()
print(secondlight.printPhrases())
print(secondlight.isActive())
输出:
['living room light']
True
['coloured light']
False