我正在从过去3个月的Python 2.7工作,今天注意到这一点后,我真的很惊讶。python字典,列表有相同的实例所有类
对于代码
class Example:
children = {}
instance1 = Example()
instance1.children['instance1_child1'] = 'Instance 1 child 1'
instance2 = Example()
instance2.children['instance2_child1'] = 'Instance 2 child 1'
for key, value in instance2.children.items():
print key + ' -> ' + value
下面的代码片段为什么输出是
instance1_child1 -> Instance 1 child 1
instance2_child1 -> Instance 2 child 1
好像只有一个字典()的所有我创建的对象的实例。我也使用list []进行了检查,他们的行为也是一样的。
我无法理解python的这种行为,它背后的逻辑是什么。这是某种设计缺陷还是我做错了什么,应该退出编程?
是它是'Example'类的一个静态成员。如果你想让它成为每个实例成员,那么它需要被附加到self,即在'__init__'方法中将其定义为'self.children'。 –
您已使用类变量。你必须为你的情况使用实例变量。在这里阅读:[类和实例变量](https://docs.python.org/2/tutorial/classes.html#class-and-instance-variables) – qvpham
只是为了进一步复杂化,如果你插入了这个句子在你的代码中:'Example.children ['bar'] ='foo''那么你会得到这个额外的输出:'bar - > foo' – Tonechas