Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 阻止列表在父类中处于静态状态_Python_List_Inheritance - Fatal编程技术网

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