Загружаем изображение…

Почему нельзя использовать изменяемые значения по умолчанию в конструкторах?



Если задать список или словарь как значение по умолчанию, объект создаётся один раз и затем переиспользуется всеми экземплярами.
class User:
def __init__(self, tags=[]):
self.tags = tags


Это приводит к тому, что изменение в одном экземпляре влияет на остальные:
u1 = User(); u2 = User()
u1.tags.append("x"); print(u2.tags)


default_factory создаёт новый объект при каждом вызове конструктора, устраняя совместное состояние:
field(default_factory=list)

Таким образом каждый экземпляр получает независимую структуру данных:
User().tags is User().tags

Использование default_factory является важной практикой при работе с изменяемыми типами и предотвращает труднообнаруживаемые ошибки состояния.

Python Ready | #совет
Просмотры: 244
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти