0

私はPythonで辞書オブジェクトの周りにラッパーオブジェクトを書き込もうとしています。

class ScoredList():
    def __init__(self,dct={}):
        self.dct = dct

list = ScoredList()
list.dct.update({1,2})

list2 = ScoredList()
list.dct.update({"hello","world"})

print list1.dct, list2.dct # they are the same but should not be!

新しいScoredListオブジェクトを作成できないようです。つまり、すべてのスコア付きリストオブジェクトが同じ基になるディクショナリを共有しているようです。どうしてこれなの?

class ScoredList2():
    def __init__(self):
        self.dct = {}

上記のScoredList2のコードは正常に機能します。しかし、Pythonでコンストラクターを適切にオーバーロードする方法を知りたいです。

4

1 に答える 1

4

辞書は可変オブジェクトです。Pythonでは、関数の作成時にデフォルト値が解析されます。つまり、すべての新しいオブジェクトに同じ空のディクショナリが割り当てられます。

これを解決するには、次のようにします。

class ScoredList():
    def __init__(self, dct=None):
        self.dct = dct if dct is not None else {}
于 2012-05-21T23:30:03.757 に答える