0

Python2.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文字列でキー設定されたの3つのインスタンスで辞書を埋めましたが、オブジェクトをに追加するとsomelist、オブジェクトは他FooBarのsにも含まれます。

これは私が期待することではありませんが(私はそれらが別々になることを期待しています)、明らかに理由があります-この理由が何であるか、なぜこれが起こるのか、そして私がそれをどのように修正するのか説明してください。ありがとう!

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 に答える