Поля класса в 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}]
Проблема здесь заключается в том, что вы обновляете один и тот же словарь 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}].
Проблема здесь заключается в том, что вы обновляете один и тот же словарь 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}].