Зачем нужен __new__ в Python и каково его практическое применение?
Ответ
Когда вы создаете экземпляр класса, Python сначала вызывает метод __new() для создания объекта, а затем вызывает метод init() __для инициализации атрибутов объекта.
__new() — это статический метод класса объекта. Он имеет следующую сигнатуру:
object.new(class, *args, **kwargs)__
Первый аргумент метода new — это класс нового объекта, который вы хотите создать. Параметры *args и **kwargs должны совпадать с параметрами init() класса. Метод new() также их использует.
Чтобы создать объект класса, нужно вызывать метод super().new().
Практическое применение new
Как правило, init() используется для инициализации вновь созданного объекта, а new() для управления способом создания объекта. Мы также можем использовать new() для инициализации атрибутов объекта, но по логике это должно быть внутри init().
Однако одним из частых практических применений new() является ограничение количества объектов, созданных из класса.
Примеры частных случаев использования new
Создание одноэлементного шаблона (хотя это не единственный способ).
Динамическое расширение классов из внешних модулей без фактического редактирования исходного кода.
Настройка классов в метаклассе (аналогично использованию call)
Расширение неизменяемого класса datetime.datetime. Это нужно, чтобы вернуть текущее время, если он создается без аргументов, и результат вызова strptime для аргумента, если он вызывается с одним строковым аргументом.
@python_job_interview
Post #39
3.88K
- 👍 13
- 🔥 3
- ❤ 1