类成员通过其他类持久化

时间:2013-03-20 19:24:00

标签: python class

我在Python 2.7.2中遇到了一些奇怪的行为。

如果我有类的字典,那些类中的任何列表都将通过包含字典中的所有类实例保持相同的值。

这将解释我的意思:

>>> class FooBar():
    somelist = []


>>> someFooBars = {}
>>> someFooBars["key1"] = FooBar()
>>> someFooBars["key2"] = FooBar()
>>> someFooBars["key3"] = FooBar()
>>> someFooBars["key1"].somelist.append("Hello")
>>> someFooBars["key1"].somelist
['Hello']
>>> someFooBars["key2"].somelist
['Hello']
>>> someFooBars["key1"].somelist.append("World!")
>>> someFooBars["key3"].somelist
['Hello', 'World!']

正如您所看到的,我在字典中填充了三个FooBar实例,用字符串键入,但是一旦我将对象添加到somelist,对象也在另一个FooBar中}第

这不是我期望发生的事情(我希望它们是分开的)但显然有一个原因 - 请解释这个原因是什么,为什么会发生这种情况,以及我将如何解决它。 谢谢!

2 个答案:

答案 0 :(得分:1)

你现在拥有的是某种“静态”成员。要实现“实例”成员行为,请添加__init__方法(充当“构造函数”):

class FooBar():
    def __init__(self):
        self.somelist = []

答案 1 :(得分:1)

somelist是一个类变量,因此它对每个实例都是相同的。