Я пытаюсь создать новые объекты и сохранить их в словаре. Но, похоже, это не работает так, как я ожидаю.Явное создание нового объекта в Python
class Fruit:
name = ''
facts = []
def __init__(self, FruitName):
self.name = FruitName
facts = []
def addfact(self, FruitName):
if FruitName == 'banana':
self.facts.append('bananas contain potassium')
elif FruitName == 'orange':
self.facts.append('These are some facts about oranges')
else:
self.facts.append('Unrecognized fruit submitted')
Files = ['banana', 'orange', 'apple']
ObjLibrary = {}
for File in Files:
if not File in ObjLibrary:
ObjLibrary[File] = Fruit(File)
ObjLibrary[File].addfact(File)
print ObjLibrary['banana'].facts
print ObjLibrary['orange'].facts
print ObjLibrary['apple'].facts
я получаю следующий результат:
['bananas contain potassium', 'These are some facts about oranges', 'Unrecognized fruit submitted']
['bananas contain potassium', 'These are some facts about oranges', 'Unrecognized fruit submitted']
['bananas contain potassium', 'These are some facts about oranges', 'Unrecognized fruit submitted']
Теперь я подозреваю, что происходит в том, что я явно не создавая три объекта так, как я хочу, а просто указывает все три элемента в словаре к одному и тому же объекту. Мой вопрос: почему? На каждом проходе цикла File
должно иметь другое значение. Что еще более важно, как мне обойти это? В моем «реальном» коде нецелесообразно создавать абсолютно новую переменную для хранения каждого объекта.
Благодарим за помощь.
Кейси
Не только не нужно, но если вы попытаетесь, то, что вы действительно делаете, объявляет атрибуты static/class. Обратите внимание, что вы можете сделать '__slots__ = ['name', 'Facts']', чтобы объявить их, но это обычно не очень хорошая идея. – Eric