python - 停止列表在父类中是静态的
问题描述
我有以下代码
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 与触发短语静态作用的实例相关联,因此我得到的输出是。
True
['living room light', 'coloured light']
False
我想要发生的是列表与实例相关联,因此一个对象将返回 ['living room light'] 和另一个 ['colored light']。我知道我可以在子类级别保存列表,但这会破坏将代码放在一个地方的目标。这是一个简化版本 - 真实的东西会有许多不同的设备。
解决方案
在父类上创建一个__init__
并将变量移动到里面,使它们成为实例变量:
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
推荐阅读
- javascript - 如何在 CSS 中更改文本下划线的线宽
- azure - API 管理 ARM 模板中的 API URL 后缀
- c# - LINQ GROUPBY 和 SUM with Dapper 能做到这一点吗?
- character - 如何在 ZebraDesigner 中的 Code 128 上使用 Ç、Ü、İ 字符
- sql - 使用 CTAS 和 PAation 创建表
- amazon-web-services - AWS VPC 流日志不适用于 s3:x-amz-server-side-encryption
- r - 如何将函数应用于r中的多个列表列表?
- airflow - 我正在尝试启动气流网络服务器。但它通过错误。我也成功地使用 pip 安装了 pymysql
- java - 未找到 JAXB-API 的实现(运行 java jar 时)
- bash - bash sed 替换两个特殊字符之间的文本