← Назад к вопросам

Какой метод использует конструктор класса?

1.3 Junior🔥 211 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод конструктора класса в Python

Конструктор класса в Python реализуется с помощью специального метода __init__ (инициализация). Это один из магических методов (дандер-методов), которые автоматически вызываются на определённых этапах жизненного цикла объекта.

Основное назначение __init__

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

  1. Инициализация атрибутов экземпляра — присваивание начальных значений полям объекта
  2. Выполнение необходимой подготовительной работы — открытие файлов, подключение к БД, валидация данных
  3. Установка состояния объекта — подготовка объекта к использованию

Пример использования

class Person:
    def __init__(self, name: str, age: int, email: str):
        """
        Конструктор класса Person.
        Инициализирует атрибуты экземпляра.
        
        Args:
            name: Имя человека
            age: Возраст
            email: Email адрес
        """
        self.name = name
        self.age = age
        self.email = email
        self.created_at = None  # Будет инициализирован позже
    
    def __repr__(self):
        return f"Person(name={self.name}, age={self.age})"


# Создание экземпляра - вызывается __init__
person = Person("Иван", 30, "ivan@example.com")
print(person.name)   # Вывод: Иван
print(person)        # Вывод: Person(name=Иван, age=30)

Отличие между __new__ и __init__

Важно понимать, что есть два метода, участвующих в создании объекта:

class MyClass:
    def __new__(cls, value):
        """
        __new__ — создаёт сам объект (выделяет память).
        Вызывается ПЕРВЫМ, до __init__.
        Обычно переопределяется редко.
        """
        print(f"__new__ вызван для класса {cls.__name__}")
        instance = super().__new__(cls)  # Создаём экземпляр
        return instance
    
    def __init__(self, value):
        """
        __init__ — инициализирует созданный объект.
        Вызывается ВТОРЫМ.
        """
        print(f"__init__ вызван с value={value}")
        self.value = value


# Порядок вызова: __new__ → __init__
obj = MyClass(42)
# Вывод:
# __new__ вызван для класса MyClass
# __init__ вызван с value=42

Параметр self — обязательное соглашение

class BankAccount:
    def __init__(self, account_number: str, balance: float = 0):
        """
        self — ссылка на экземпляр объекта (аналог this в Java/C++).
        Python передаёт его автоматически.
        """
        self.account_number = account_number
        self.balance = balance
        self.transactions = []


# При вызове Person(...) Python автоматически передаёт self
account = BankAccount("12345678", 1000.0)
# Эквивалентно: BankAccount.__init__(account, "12345678", 1000.0)

Инициализация значений по умолчанию

class Product:
    def __init__(self, name: str, price: float, in_stock: bool = True):
        """
        Параметры с значениями по умолчанию (как в обычных функциях).
        """
        self.name = name
        self.price = price
        self.in_stock = in_stock
        self.created_at = datetime.now()
        self.metadata = {}  # Пустой словарь


# Можно создавать без указания всех параметров
product1 = Product("Ноутбук", 50000)
product2 = Product("Мышь", 500, False)

Наследование и переопределение __init__

class Animal:
    def __init__(self, name: str):
        self.name = name
        print(f"Создано животное {name}")


class Dog(Animal):
    def __init__(self, name: str, breed: str):
        # Вызываем __init__ родительского класса
        super().__init__(name)
        self.breed = breed
        print(f"Порода: {breed}")


# Вывод:
# Создано животное Рекс
# Порода: Овчарка
dog = Dog("Рекс", "Овчарка")

Частые ошибки

# ❌ Неправильно - забыли self
class BadClass:
    def init(self, value):  # init вместо __init__
        self.value = value

obj = BadClass(42)  # __init__ не будет вызван!

# ✅ Правильно
class GoodClass:
    def __init__(self, value):  # Двойные подчёркивания
        self.value = value

obj = GoodClass(42)  # __init__ вызовется корректно

Метод __init__ — ключевой компонент объектно-ориентированного программирования в Python, обеспечивающий правильную инициализацию объектов и позволяющий им начать работу в консистентном состоянии.

Какой метод использует конструктор класса? | PrepBro