В Python можно ли определить конструктор класса как виртуальный метод?

В Python нет понятия виртуальных методов в том виде, как это реализовано в языках вроде C++ или Java. Конструктор класса в Python — это метод init, и он не может быть объявлен виртуальным.

Короткий ответ

Что ответить на собеседовании

В Python нет понятия виртуальных методов в том виде, как это реализовано в языках вроде C++ или Java. Конструктор класса в Python — это метод init, и он не может быть объявлен виртуальным.

Подробный разбор

Ответ с пояснениями

В Python нет понятия виртуальных методов в том виде, как это реализовано в языках вроде C++ или Java. Конструктор класса в Python — это метод __init__, и он не может быть объявлен виртуальным.

Однако, благодаря динамической природе Python, если вы создадите метод __init__ в базовом классе и переопределите его в наследнике, то при создании объекта наследника будет вызван именно его конструктор. Это поведение по умолчанию, и его можно считать аналогом виртуального метода.

Пример:

class Base:
    def __init__(self):
        print("Base init")

class Derived(Base):
    def __init__(self):
        print("Derived init")

obj = Derived()  # Выведет: Derived init

Таким образом, конструктор в Python по сути "виртуален" из-за динамического разрешения методов, но специального ключевого слова для этого нет.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее