Короткий ответ
__init__ — это метод-инициализатор, который вызывается автоматически сразу после создания нового объекта класса и используется для присвоения начальных значений атрибутам этого экземпляра; он не создаёт сам объект, а только настраивает уже созданный.
Как это работает подробнее
Когда пишут obj = MyClass(arg1, arg2), Python сначала вызывает __new__, который фактически создаёт и возвращает новый пустой объект, а затем автоматически вызывает __init__(obj, arg1, arg2) на этом объекте. Для подавляющего большинства классов __new__ переопределять не нужно — достаточно __init__, чтобы задать стартовое состояние.
Пример кода
example.py
class User:
def __init__(self, name, email):
self.name = name
self.email = email
self.is_active = True # значение по умолчанию при создании
u = User("Иван", "ivan@example.com")
print(u.name, u.email, u.is_active) # Иван ivan@example.com TrueЧто использовать на практике
- Практика. В
__init__обычно присваивают переданные аргументы атрибутам черезself.attr = value, выполняют простую валидацию входных данных и, при необходимости, вызывают__init__родительского класса черезsuper().__init__(...), если класс использует наследование.
Подводные камни
- Риски. Путают
__init__с конструктором в смысле "создания объекта" — объект уже существует к моменту вызова__init__. Также забывают вызватьsuper().__init__()в наследниках, из-за чего часть состояния родительского класса остаётся не инициализированной.