1

重複の可能性:
Python の「最小の驚き」:
オブジェクト間で理由もなく共有される可変デフォルト引数ディクショナリ?

     class Player():
        zones = {}
        def __init__(self):
            self.zones['hand'] = []
        def InitHand(self):
            for a in range(5):
                self.zones['hand'].append(a)
lst = []
lst.append(Player())
lst.append(Player())
lst[0].InitHand()
print lst[1].zones['hand']

これは「[0、1、2、3、4]」を出力しますが、0番目の要素のみを初期化しました...以下のようにそれらを配列に変更すると問題が解決しますが、私の人生では、これがなぜなのかわかりません起こります。

    class Player2():
        zones = []
        def __init__(self):
            self.zones = []
        def InitHand(self):
            for a in range(5):
                self.zones.append(a)
lst = []
lst.append(Player2())
lst.append(Player2())
lst[0].InitHand()
print lst[1].zones

これは期待どおりに「[]」を出力します

4

1 に答える 1

3

あなたのコードでは、すべてのプレーヤーが同じzones辞書を共有しています。クラス スコープで設定されるものはすべて、インスタンス属性ではなく、クラス属性です。

class Player():
    def __init__(self):
        self.zones = {}
        self.zones['hand'] = []
    def InitHand(self):
        for a in range(5):
            self.zones['hand'].append(a)
于 2013-01-22T17:55:05.793 に答える