TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4616 2.53K
super(): как это работает

Сегодня мы разберём одно из ключевых понятий объектно-ориентированного программирования в Python — super(). Когда мы работаем с наследованием, то порой сталкиваемся с дублированием кода:


class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary

def raise_salary(self, amount):
self.salary += amount


class Manager(Employee):
def __init__(self, name, salary, department):
self.name = name
self.salary = salary
self.department = department


На первый взгляд, всё верно. Но посмотрите внимательно — часть кода в Manager.__init__ дублирует логику базового класса Employee. В больших проектах уследить за всеми такими повторениями становится трудоемко. Решение простое — использовать super():


class Manager(Employee):
def __init__(self, name, salary, department):
super().__init__(name, salary)
self.department = department


Теперь Manager вызывает конструктор базового класса Employee, а значит:

🔘 Код становится короче;
🔘 Меньше ошибок при рефакторинге.


Как это работает под капотом

Многие думают, что super() — это функция. На самом деле это класс. При его вызове возвращается прокси-объект, который даёт доступ к методам родительского класса. То есть строка:


super().__init__(name, salary)


означает:

«Возьми ближайший родительский класс в иерархии и вызови его метод `__init__()`».


Что важно помнить

🔘 super() работает не только в __init__. Его можно использовать в любых методах, которые переопределяются в подклассе;
🔘 Можно вызывать super() без аргументов — контекст определяется автоматически;
🔘 В сложных системах с множественным наследованием super() работает через механизм Method Resolution Order (MRO). Это гарантирует, что каждый базовый класс вызывается ровно один раз.

#основы
@zen_of_python
  • 👍 13
  • ❤ 1
More from @zen_of_python
  1. Sep 23, 2026Как __getitem__ превращает объект Python в итерируемый Для цикла for объекту не всегда нуж…
  2. Sep 23, 2026Что меняет re.prefixmatch() в Python 3.15 re.match() проверяет совпадение только в начале…
  3. Sep 23, 2026Pyodide разрешил публиковать WASM-колёса прямо в PyPI В Pyodide 314.0 появилась прямая пуб…
  4. Sep 22, 2026Как применять структурное сопоставление с образцом к деревьям в Python Структурное сопоста…
  5. Sep 22, 2026Почему в Python стоит подменять свой интерфейс, а не httpx Если бизнес-тест напрямую подме…
  6. Sep 22, 2026Как точно типизировать *args и **kwargs в Python Запись *args: tuple[int, str] выглядит ка…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →