
Полный гайд по dunder-методам в Python (от новичка до профи)
enamored_poc 49 минут назад Полный гайд по dunder-методам в Python (от новичка до профи) Простой 23 мин 1.1K Python * Программирование * ООП * Туториал 1. Жизненный цикл объекта: Рождение, жизнь и смертьЧастая ошибка...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. enamored_poc 49 минут назад Полный гайд по dunder-методам в Python (от новичка до профи) Простой 23 мин 1. 1K Python * Программирование * ООП * Туториал 1. Жизненный цикл объекта: Рождение, жизнь и смертьЧастая ошибка новичков — называть __init__ конструктором.
По факту, когда вы пишете obj = MyClass(), Python запускает цепочку событий, в которой __init__ играет лишь вторую скрипку. Давайте разберем, как объекты рождаются и умирают на самом деле. __new__(cls): Настоящий конструкторИменно __new__ отвечает за создание объекта.
Технические детали
Он выделяет память и возвращает ту самую пустую «болванку», которая затем передается в __init__. Обратите внимание: метод принимает класс (cls), а не экземпляр (self), потому что экземпляра на этот момент физически не существует. В 99% случаев вам не нужно трогать __new__.
Базовый класс object отлично справляется сам. Но если вам нужно вмешаться в процесс создания — например, реализовать паттерн Singleton (когда в системе может существовать только один экземпляр класса), — без __new__ не обойтись. class DatabaseConnection: _instance = None def __new__(cls, *args, **kwargs): if cls.
_instance is None: # Если объекта еще нет, создаем его через базовый класс cls. __new__(cls) # Если есть — просто возвращаем существующий return cls. _instance # Проверяем: db1 = DatabaseConnection() db2 = DatabaseConnection() print(db1 is db2) # Выведет: True (это один и тот же объект в памяти) __init__(self): ИнициализаторИтак, __new__ построил «коробку» и вернул её.
Отраслевые последствия
Теперь за дело берется __init__. Его единственная задача — наполнить эту коробку данными (задать начальное состояние атрибутов). Важное правило: __init__ никогда ничего не возвращает (строго говоря, он возвращает None).
Если вы попытаетесь сделать return "success" внутри __init__, Python бросит исключение TypeError. class User: def __init__(self, username: str): # Экземпляр (self) уже создан, мы просто вешаем на него атрибуты self. username = username Краткая аналогия: __new__ — это застройщик, который строит дом.
__init__ — дизайнер интерьера, который расставляет в нем мебель. __del__(self): Разрушитель (и почему ему нельзя доверять)Метод __del__ вызывается сборщиком мусора (Garbage Collector), когда счетчик ссылок на объект падает до нуля. Звучит как идеальное место, чтобы закрыть файл или разорвать соединение с базой данных, верно?
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





