⚡ Краткий справочник
class Child(Parent): — наследование.
super().__init__(...) — вызов родительского инициализатора.
super().method() — вызов родительского метода.
isinstance(obj, Class) — объект относится к классу или наследнику.
isinstance(obj, (A, B)) — проверка на несколько классов.
issubclass(Child, Parent) — класс является наследником.
- Переопределение метода: заново определить метод с тем же именем в потомке.
- В Python нет перегрузки методов по количеству аргументов.
Общий синтаксис наследования
class Parent:
def __init__(self, value: str) -> None:
self.value = value
class Child(Parent):
def __init__(self, value: str, extra: int) -> None:
super().__init__(value)
self.extra = extra
def method(self) -> None:
super().method() # если нужно расширить поведение родителя
...
Наследование
| Запись | Что делает |
class Child(Parent): | Дочерний класс наследует поля и методы родителя. |
class Child: | Равнозначно class Child(object):. |
Использование super()
| Запись | Когда использовать | Пример |
super().__init__(...) | Родитель уже инициализирует общие поля. | super().__init__(name) |
super().method() | Нужно расширить, а не заменить метод родителя. | super().work() |
Parent.method(self) | Работает, но не рекомендуется: жёсткая привязка к имени. | — |
Переопределение методов
| Ситуация | Поведение |
| Метод не переопределён в потомке | Используется реализация родителя. |
| Метод переопределён в потомке | Используется реализация потомка. |
Переопределённый метод вызывает super().method() | Сначала выполняется родитель, затем потомок. |
Проверка типов
| Функция | Первый аргумент | Второй аргумент | Результат |
isinstance(obj, Class) | Объект | Класс или кортеж классов | True, если объект относится к классу или его наследнику. |
issubclass(Child, Parent) | Класс | Класс или кортеж классов | True, если первый класс наследуется от второго. |
Перегрузка
| Язык | Поддержка перегрузки | Что делать в Python |
| Java / C++ | Есть | — |
| Python | Нет по умолчанию | Использовать значения по умолчанию или проверку аргументов внутри метода. |
Проверить по документации: аннотации типов и
ClassVar выходят за рамки исходного материала. Подробнее см.
typing и
PEP 484.