Поля класса в Python перезаписываются? Немного не понимаю как работают классы в Python class SimpleClass:
my_dict = {}
number = None
def return_res(self):
return self.my_dict
def __init__(self, args):
self.number = args
self.my_method()
def my_method(self):
value = self.number+10
self.my_dict.update({'key': value})
one = SimpleClass(1).return_res()
two = SimpleClass(2).return_res()
three = SimpleClass(3).return_res()
result = [one, two, three]
print(result)
Почему результат будет таким ?[{'key': 13}, {'key': 13}, {'key': 13}]
Как получить результат такой ?[{'key': 11}, {'key': 12}, {'key': 13}]

21 Авг 2019 в 06:58
194 +1
0
Ответы
1

Проблема здесь заключается в том, что вы обновляете один и тот же словарь my_dict для всех экземпляров класса SimpleClass, поэтому все они ссылаются на один и тот же словарь. Чтобы получить ожидаемый результат, нужно создавать новый словарь для каждого экземпляра класса в методе __init__.

Вот исправленный код:

class SimpleClass:
my_dict = {}
number = None
def return_res(self):
return self.my_dict
def __init__(self, args):
self.number = args
self.my_dict = {} # Создаем новый словарь для каждого экземпляра
self.my_method()
def my_method(self):
value = self.number + 10
self.my_dict.update({'key': value})
one = SimpleClass(1).return_res()
two = SimpleClass(2).return_res()
three = SimpleClass(3).return_res()
result = [one, two, three]
print(result)

Теперь каждый экземпляр класса SimpleClass содержит свой собственный словарь my_dict, и результат будет [{'key': 11}, {'key': 12}, {'key': 13}].

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир