← Назад к вопросам
Какой метод использует конструктор класса?
1.3 Junior🔥 211 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Метод конструктора класса в Python
Конструктор класса в Python реализуется с помощью специального метода __init__ (инициализация). Это один из магических методов (дандер-методов), которые автоматически вызываются на определённых этапах жизненного цикла объекта.
Основное назначение __init__
Метод __init__ вызывается автоматически сразу после создания экземпляра класса с помощью конструктора. Его основное предназначение:
- Инициализация атрибутов экземпляра — присваивание начальных значений полям объекта
- Выполнение необходимой подготовительной работы — открытие файлов, подключение к БД, валидация данных
- Установка состояния объекта — подготовка объекта к использованию
Пример использования
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, обеспечивающий правильную инициализацию объектов и позволяющий им начать работу в консистентном состоянии.