Как происходит инициализация экземпляра класса в Python и зачем нужен __new__?

Метод new в Python отвечает за создание нового экземпляра класса. Он вызывается до init и возвращает сам объект. Обычно его используют в следующих случаях:

Короткий ответ

Что ответить на собеседовании

Метод new в Python отвечает за создание нового экземпляра класса. Он вызывается до init и возвращает сам объект. Обычно его используют в следующих случаях:

Подробный разбор

Ответ с пояснениями

Метод __new__ в Python отвечает за создание нового экземпляра класса. Он вызывается до __init__ и возвращает сам объект. Обычно его используют в следующих случаях:

  • Когда нужно контролировать процесс создания объекта, например, реализовать паттерн Singleton.
  • Для создания экземпляров неизменяемых типов (например, кортежей или строк), где инициализация через __init__ невозможна.
  • При наследовании от встроенных типов, чтобы корректно создать объект.

Пример использования __new__ для Singleton:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance

    def __init__(self, value):
        self.value = value

s1 = Singleton(1)
s2 = Singleton(2)
print(s1 is s2)  # True
print(s1.value)  # 2

Здесь __new__ гарантирует, что создаётся только один экземпляр класса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее