← Назад к вопросам
Какой обязательный параметр для описания класса new?
2.3 Middle🔥 171 комментариев
#REST API и HTTP
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Обязательный параметр метода new
Для описания класса в Python метод __new__ требует обязательный параметр cls — это первый позиционный аргумент, который представляет сам класс.
Синтаксис и назначение
class MyClass:
def __new__(cls, *args, **kwargs):
# cls — обязательный параметр
instance = super().__new__(cls)
return instance
def __init__(self, value):
self.value = value
Метод __new__ вызывается ДО __init__ и отвечает за создание нового экземпляра класса. Параметр cls автоматически передаётся Python и указывает на класс, для которого создаётся объект.
Как это работает
Когда ты создаёшь объект:
obj = MyClass(42)
Внутри Python выполняет:
instance = MyClass.__new__(MyClass)— создание объектаinstance.__init__(42)— инициализация объекта
Практический пример с Singleton
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
obj1 = Singleton()
obj2 = Singleton()
print(obj1 is obj2) # True — один и тот же объект
Отличие от init
| Метод | Вызывается | Возвращает | Назначение |
|---|---|---|---|
__new__ | Первым | Экземпляр класса | Создание объекта |
__init__ | Вторым | None | Инициализация объекта |
Важные моменты
clsвсегда обязателен — это магический параметр для методов класса- Параметр называется
clsпо соглашению, но можно любое имя (не рекомендуется) __new__должен вернуть экземпляр класса, иначе__init__не вызовется- Если
__new__возвращает другой класс,__init__вызван не будет
class Parent:
def __new__(cls):
return object.__new__(object) # Возвращаем не наш класс
# __init__ не вызовется, так как возвращён object, а не Parent
Это фундаментальный механизм Python, необходимый для понимания объектно-ориентированного программирования.