0

同じクラスの複数のオブジェクトを含む辞書を作成したいと思います。各オブジェクトは独立している必要があります。何かのようなもの:

#!/usr/bin/python3

class myReserve():

    myList = dict()

    def __init__(self, initName):
        self.myName = initName
        self.setList()

    def setList(self):
        if self.myName == "fruit":
            self.myList[0] = "Orange"
            self.myList[1] = "Lemon"
        elif self.myName == "vegetable":
            self.myList[0] = "Tomato"
            self.myList[1] = "Carrot"
        #If neither fruit nor vegetable
        #myList should be empty.


myStore = dict()
myStore[0] = myReserve("fruit")
myStore[1] = myReserve("vegetable")
myStore[2] = myReserve("spices")

print(myStore[0].myList)

これは以下を出力します:

{0: 'Tomato', 1: 'Carrot'}

私はそれが印刷されると思った:

{0: 'Orange', 1: 'Lemon'}

オブジェクトがPythonで参照渡しされることを理解しました。

dict1 = {"var": 128}
dict2 = dict1
dict2["var"] = 0
print(dict1["var"])

印刷します:

0

クラスを作成することで、さまざまなオブジェクトの構造を作成したいと考えています。最初のコード例の動作がわかりません。このようなことをPythonの方法で行うことは可能ですか?

4

1 に答える 1

1

あなたの問題はmyList、クラスレベルで定義しているため、のすべてのインスタンスで共有されることですmyReservemyReserve.__init__代わりに定義してみてください:

class myReserve():
    def __init__(self, initName):
        self.myList = dict()

完全なコード:

#!/usr/bin/python3

class myReserve():
    def __init__(self, initName):
        self.myList = dict()
        self.myName = initName
        self.setList()

    def setList(self):
        if self.myName == "fruit":
            self.myList[0] = "Orange"
            self.myList[1] = "Lemon"
        elif self.myName == "vegetable":
            self.myList[0] = "Tomato"
            self.myList[1] = "Carrot"
        #If neither fruit nor vegetable
        #myList should be empty.


myStore = dict()
myStore[0] = myReserve("fruit")
myStore[1] = myReserve("vegetable")
myStore[2] = myReserve("spices")

print(myStore[0].myList)
于 2013-02-22T09:15:45.903 に答える