Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Зачем нужен __new__ в Python и каково его практическое применение?

Программирование+4
Анонимный вопрос
  ·   · 4,5 K
Представитель хостинг-провайдера Eternalhost...  · 24 мая 2022
Зачем нужен __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 для аргумента, если он вызывается с одним строковым аргументом.
Просто о настройках и администрировании сайта в нашем блоге.Перейти на eternalhost.net/blog
В литературе и нашей, и за рубежом используется термин - паттерн синглтон, вместо одноэлементного шаблона, если... Читать дальше
Openstack DevOps and IBM/Informix Certified DBA...  · 24 мая 2022
Когда вы создаете экземпляр класса, Python сначала вызывает метод new() для создания объекта,  а затем вызывает метод init() для инициализации атрибутов объекта. new() — это статический метод класса объекта. Он имеет следующую з... Читать далее
Я программист в компании - senior  · 24 мая 2022
new() предназначен главным образом для того, чтобы позволить подклассам неизменяемых типов (например, int, str или tuple) настраивать создание экземпляра. Он также обычно переопределяется в пользовательских метаклассах, чтобы... Читать далее
1 эксперт согласен