所以 Python 不是我的强项,而且我遇到了一个我认为很奇怪的问题。我已将问题缩小到几行代码,并进行了简化以使提出这个问题变得更容易。我有一个对象列表,这个对象:
class FinalRecord():
ruid = 0
drugs = {}
我在 shell 中创建它们,如下所示:
finalRecords = []
fr = FinalRecord()
fr.ruid = 7
finalRecords.append(fr)
fr2 = FinalRecord()
fr2.ruid = 10
finalRecords.append(fr2)
一旦我想更改一个对象上的药物指令,它也会更改另一个对象上的药物指令
finalRecords[0].drugs["Avonex"] = "Found"
我打印出这个:
finalRecords[1].drugs
它显示:
{'Avonex':'Found'}
当我期待它实际上是空的时。我知道我不完全理解 Python 如何处理对象,有人可以帮助我吗?
这样做的原因是因为drugs
是一个类属性。因此,如果您对一个对象进行更改,它实际上也会对其他对象进行更改。
如果您希望不出现这种行为,那么您正在寻找实例属性。将药物放入您的__init__
像这样:
class FinalRecord():
def __init__(self):
self.ruid = 0
self.drugs = {}
请注意使用self
,这是对您的对象的引用。
这是一些信息类与实例属性
因此,完整的演示说明了这种行为:
>>> class FinalRecord():
... def __init__(self):
... self.ruid = 0
... self.drugs = {}
...
>>> obj1 = FinalRecord()
>>> obj2 = FinalRecord()
>>> obj1.drugs['stuff'] = 2
>>> print(obj1.drugs)
{'stuff': 2}
>>> print(obj2.drugs)
{}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)