#python-3.x
#python-3.x
Вопрос:
Я хотел бы создать dictonary: {int, Class} в цикле, однако объект класса переопределяется. Я почти уверен, что это основная проблема, но я застрял
class Simple:
simpleDic = {
'name': {""},
'age': {1}}
def __init__(self, name, age):
self.simpleDic['name'] = name
self.simpleDic['age'] = age
def __str__(self):
return "{} {}n".format(self.simpleDic['name'], self.simpleDic['age'])
def foo():
myDict = {}
for x in range(3):
myDict[x] = Simple('Name' str(x), x)
print(('{}: {}n'.format("Creating", myDict[x])))
for key in myDict:
print(('{}: {}n'.format("Printing" str(key), myDict[key])))
#### Main program here ####
foo()
Результат выглядит следующим образом:
Ответ №1:
Ваша проблема связана с последней печатью, которую вы печатаете myDict[x]
, когда вы должны печатать myDict[key]
x содержит последнее значение из первой итерации, поэтому вы практически печатаете один и тот же ключ повсюду
Следуя вашему вопросу в этом комментарии:
class Simple:
def __init__(self, name, age):
self.simpleDic = {"name": name, "age": age}
def __str__(self):
return "{} {}n".format(self.simpleDic['name'], self.simpleDic['age'])
def __repr__(self):
return "{} {}n".format(self.simpleDic['name'], self.simpleDic['age'])
def foo():
myDict = {}
for x in range(3):
myDict[x] = Simple('Name' str(x), x)
print(('{}: {}n'.format("Creating", myDict[x])))
print(myDict)
Комментарии:
1. Боже мой, какая глупая ошибка. Я сожалею об этом.
2. Случается с лучшими из нас 🙂
3. А что, если я изменил код, о котором идет речь сейчас (заменил простую переменную словарем):
4. Тогда произойдет сбой, поскольку myDict принадлежит области действия
foo
функции, и вы получитеNameError: name 'myDict' is not defined
5. Вы можете вернуть
myDict
значение в функции foo и присвоить его переменной в глобальной области видимости (перед вашим циклом)