✍️ Как функционирует метод __new__() в Python?
Метод __new__() отвечает за создание нового экземпляра класса, выделяя для него память. Он вызывается перед методом __init__(), который занимается инициализацией уже созданного экземпляра. Это особенно важно при работе с неизменяемыми типами, такими как str или int, а также в ситуациях, когда необходимо контролировать процесс создания объекта, например, при использовании паттерна Singleton.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
Чем «data»-дескриптор отличается от «non-data», как это влияет на порядок поиска атрибута, и почему @property — это тоже дескриптор?
В Python любой объект с __get__ — дескриптор.
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__. @property — именно non-data дескриптор.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-descriptor → obj.__dict__ → non-data descriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-descriptor → obj.__dict__ → non-data descriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
👍1