3

次のコードは私が遭遇した問題であり、説明を探しています。コードの動作が予想とは異なります。コードの下に、予想される出力と実際の出力が表示されます。最後に 1 つ注意しておきたいのは、このコードは「奇妙」かもしれないということです。この理由は、プログラムでのこの正確な発生 (範囲は変数でしたが、これらの値で) が問題を引き起こしたためです..そのため、この単純なコードを複製して複製しました。

userList = []

class User():
    listA = []
    listB = []

    def setup(self):
        for i in range(1):
            self.listA.append('a')
            self.listB.append('b')

for i in range(5):
    user = User()
    userList.append(user)

for i in range(len(userList)):
    userList[i].setup()

for i in range(len(userList)):
    print str(userList[i].listA)
    print str(userList[i].listB)

期待される出力

['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']
['a']
['b']

実際の出力

['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']
['a','a','a','a','a']
['b','b','b','b','b']

討論

なぜこれが起こっているのかについての説明に感謝します。組み込みの append() 関数が何らかの理由ですべてのユーザーに影響を与えているのか、それとも各ユーザーが何らかの形でフィールドを共有しているのかはわかりません。Python 2.7.3 で実行されます。

4

1 に答える 1

8

これをあなたのコードと比較してください

class User():
    def setup(self):
        self.listA = []                          # instance variable
        self.listB = []                          # instance variable
        for i in range(1):
            self.listA.append('a')
            self.listB.append('b')

クラスレベルで変数を「宣言」する必要はないことに注意してください

于 2012-06-26T22:32:20.597 に答える