【发布时间】:2016-08-22 19:11:36
【问题描述】:
我过去 3 个月一直在研究 python 2.7,今天注意到这一点后我真的很惊讶。
对于下面sn-p的代码
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
对于我正在创建的所有对象,似乎只有一个 dict() 实例。我也检查了 list[] ,它们的行为也相同。
我无法理解 python 的这种行为及其背后的逻辑。这是某种设计缺陷还是我做错了什么并且应该退出编程?
【问题讨论】:
-
是的,它是
Example类的静态成员。如果您希望它成为每个实例的成员,则需要将其附加到 self ,即在__init__方法中将其定义为self.children。 -
你使用了类变量。您必须为您的案例使用实例变量。在这里阅读:Class and Instance Variables
-
为了让事情更复杂,如果你在代码中插入了这句话:
Example.children['bar'] = 'foo',那么你会得到这个额外的输出:bar -> foo -
@julivico 该链接很有帮助。谢谢
标签: python list class dictionary instance