Sobes.tech
Middle

Методи new дар контексти забони Python чӣ мекунад?

sobes.tech AI

Ҷавоб аз AI

__new__ - это метод класса, отвечающий за создание нового экземпляра класса. Он вызывается до __init__ и определяет, какой объект будет возвращен. Обычно используется для создания уникальных объектов (Singleton) или объектов неизменяемого типа (например, tuple или str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Проверяет, существует ли уже экземпляр
        if cls._instance is None:
            # Если нет, создает его, делегируя создание родительскому классу (object)
            cls._instance = super().__new__(cls)
        # Возвращает существующий или только что созданный экземпляр
        return cls._instance

# Примеры использования
s1 = Singleton()
s2 = Singleton()

# Ожидаемый результат: True
print(s1 is s2)

Сравнение __new__ и __init__:

  • __new__:

    • Статический метод (первый аргумент cls).
    • Вызывается до создания экземпляра.
    • Возвращает созданный экземпляр.
  • __init__:

    • Метод экземпляра (первый аргумент self).
    • Вызывается после создания экземпляра.
    • Не возвращает значения (неявно возвращает None).
    • Используется для инициализации атрибутов созданного объекта.