super
super(type, object_or_type=None)
Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
Параметры
type
: Тип, от которого следует начать поиск объекта-посредника. Ранее атрибут был обязателен.- o
bj-or-type
: Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которогоisinstance(obj, type)
возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которогоissubclass(subtype, type)
возвращает True. Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике. Порядок поиска метода тот же, что и приgetattr()
, только type пропускается: тип имеет атрибутmro
, в котором задаётся порядок поиска методов, используемый какgetattr()
, так иsuper()
. Атрибут динамический и может изменяться по мере обновления иерархии наследования.
Типичные случаи использования super()
- В иерархиях с единичным наследованием используется для обращения к родительским классам, чтобы явно не указывать их имена, это упрощает поддержку кода в дальнейшем. Данный тип использования имеет родственников в других языках программирования.
- Второй вариант используется для поддержки совместного множественного наследования в динамическом окружении. Вариант уникален для Питона и отсутствует в языках статически компилируемых или поддерживающих только единичное наследование. Он делает возможным обращение с ромбовидными иерархиями (см. проблема ромба), при которых несколько базовых классов задают реализацию метода с одним и тем же именем. Правила хорошего проектирования требуют того, чтобы во всех случаях метод имел одну и ту же сигнатуру (в связи с тем, что порядок вызовов определяется во время исполнения, потому как он задаётся при изменении иерархии, и потому что в цепи могут присутствовать собратья, неизвестные до момента исполнения).
Возвращаемое значение
Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
Примеры
class C(B):
def method(self, arg):
super().method(arg)
Без аргументов функция работает только внутри определения класса: необходимые для идентификации класса и доступа к методам его объекта детали заполняет компилятор.