Что такое инициализатор __init__ в Python?

Ответ

Инициализатор __init__ — это специальный метод в Python, который автоматически вызывается после создания экземпляра класса. Его основная задача — установить начальное состояние объекта, то есть присвоить значения его атрибутам.

Важно отличать его от __new__, который отвечает за создание экземпляра, в то время как __init__ — за его инициализацию.

Пример:

class User:
    # Метод-инициализатор
    def __init__(self, username: str, email: str):
        # Установка начальных атрибутов экземпляра
        self.username = username
        self.email = email
        self.is_active = True # Можно задавать значения по умолчанию

# При создании экземпляра `User(...)` автоматически вызывается `__init__`
user1 = User("alice", "alice@example.com")

print(f"Username: {user1.username}, Active: {user1.is_active}")
# Вывод: Username: alice, Active: True

Ключевые особенности:

  • self: Первым аргументом всегда является self, который ссылается на сам создаваемый экземпляр.
  • Отсутствие возвращаемого значения: __init__ не должен возвращать никакого значения. Его задача — модифицировать self. Попытка вернуть что-либо, кроме None, вызовет TypeError.
  • Необязательность: Если __init__ не определен в классе, Python будет искать его в родительских классах по цепочке наследования.

Ответ 18+ 🔞

А, ну вот, смотри, опять про эту вашу инициализацию, блядь. __init__ — это типа такой специальный метод, который сам, сука, вызывается, как только ты новый объект создал. Его задача — привести этот свежеиспечённый объект в божеский вид, то есть навесить на него все нужные атрибуты.

Главное, не путай его с __new__, ёпта! __new__ — это тот, кто объект рожает, а __init__ — это тот, кто его одевает, обувает и в школу собирает, блядь.

Вот тебе наглядный пиздюк:

class User:
    # А вот и он, наш инициализатор, блядь
    def __init__(self, username: str, email: str):
        # Начинаем вешать ярлыки на свежий экземпляр
        self.username = username
        self.email = email
        self.is_active = True # А это можно и по умолчанию воткнуть, зачем париться

# Как только вот эта строчка выполняется, `__init__` уже бежит как ошпаренный
user1 = User("alice", "alice@example.com")

print(f"Username: {user1.username}, Active: {user1.is_active}")
# Напечатает: Username: alice, Active: True

Важные моменты, чтобы не облажаться:

  • self: Это священная корова, первый аргумент всегда. Это и есть тот самый объект, который мы только что слепили. Без него — нихуя не работает.
  • Возвращать ничего не надо: Его работа — нагадить атрибутами внутрь self, а не что-то тебе возвращать. Если попрёшься что-то вернуть (кроме None), получишь TypeError прямо в ебальник.
  • Можно и без него: Если в твоём классе __init__ не объявлен, Python, хитрая жопа, полезет искать его у родителей. Так что не обязательно его везде городить.