2013-02-22 1 views
0

Я хотел бы создать dict, содержащий несколько объектов одного класса. Каждый объект должен быть независимым. Что-то вроде:Python3: Как создать dict из разных объектов одного и того же класса?

#!/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?

ответ

1

Ваша проблема заключается в том, что вы определяете myList на уровне класса, чтобы он делился каждым экземпляром myReserve. Попробуйте его определения в myReserve.__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) 
+0

Он работает, спасибо aknuds1 :) –

Смежные вопросы