🔖 Справочник команд и синтаксиса

⚡ Краткий справочник

  • class Child(Parent): — наследование.
  • def method(self): ... — переопределение метода родителя.
  • super().__init__(...) — вызов родительского конструктора.
  • super().method() — вызов родительского метода.
  • isinstance(obj, Class) — объект является экземпляром Class или его наследника.
  • issubclass(A, B) — A наследуется от B.

Общий синтаксис наследования

class Parent:
    def __init__(self, value: int) -> None:
        self.value = value

    def show(self) -> None:
        print(self.value)


class Child(Parent):
    def __init__(self, value: int, extra: str) -> None:
        super().__init__(value)
        self.extra = extra

    def show(self) -> None:
        super().show()
        print(self.extra)

Таблицы

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

КонструкцияОписаниеПример
class Child(Parent):Дочерний класс наследует Parentclass Programmer(Employee):
Переопределение методаМетод с тем же именем в дочернем классе заменяет родительскийdef work(self): ...
super().method()Вызов метода ближайшего родителяsuper().work()

super()

ЗаписьКогда используется
super().__init__(...)Чтобы не дублировать инициализацию родителя
super().method()Чтобы расширить, а не полностью заменить метод родителя
В цепочке наследованияsuper() находит ближайшего родителя автоматически

isinstance и issubclass

ФункцияСинтаксисРезультат True, если...
isinstanceisinstance(obj, Class)obj — экземпляр Class или его наследника
isinstanceisinstance(obj, (A, B))obj принадлежит одному из классов кортежа
issubclassissubclass(A, B)A напрямую или через цепочку наследуется от B
issubclassissubclass(A, (B, C))A наследуется от любого класса кортежа

type() против isinstance()

ЗаписьУчитывает наследованиеКогда использовать
type(obj) is ClassНетПочти никогда; подходит только для проверки точного типа
isinstance(obj, Class)ДаВсегда, когда важна иерархия классов

Частые шаблоны

Полиморфная обработка списка объектов

def process_staff(staff: list[Employee]) -> None:
    for person in staff:
        person.work()  # вызовется нужная версия метода

Защита от некорректного класса

def hire(cls: type):
    if not issubclass(cls, Employee):
        raise ValueError("Можно нанимать только наследников Employee")
    person = cls()
    person.work()
Проверить по документации: isinstance, issubclass, super.