0

我在 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,这些对象也在其他FooBars 中。

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

4

2 回答 2

1

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

class FooBar():
    def __init__(self):
        self.somelist = []
于 2013-03-20T19:26:27.330 回答
1

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

于 2013-03-20T19:28:06.077 回答