Про python - довідник

type - Тип, від якого слід почати пошук об'єкта-посередника. -py3.0 Раніше атрибут був обов'язковий.

obj-or-type - Якщо не вказано, повертається непов'язаний об'єкт-посередник. Якщо атрибут є об'єктом, то буде отриманий посередник для отримання методу об'єкта, для якого isinstance (obj, type) повертає True. Якщо атрибут є типом, то буде отриманий посередник для отримання метод класу, для якого issubclass (subtype, type) повертає True.

Використовується для доступу до базових реалізацій успадкованих методів, перекритих в класі-спадкоємця.

Порядок пошуку методу той же, що і при getattr (). тільки type пропускається: тип має атрибут __mro__. в якому задається порядок пошуку методів, який використовується як getattr (). так і super (). Атрибут динамічний і може змінюватися по мірі відновлення ієрархії успадкування.

Типові випадки використання super ()

1. У ієрархіях з одиничним спадкуванням використовується для звернення до батьківських класів, щоб явно не вказувати їх імена, це спрощує підтримку коду в подальшому. Даний тип використання має родичів в інших мовах програмування.

2. Другий варіант використовується для підтримки спільного множинного спадкоємства в динамічному оточенні. Варіант унікальний для Пітона і відсутній в мовах статично компільованих або підтримують тільки одиничне успадкування. Він робить можливим звернення з ромбовидними ієрархіями (див. Проблема ромба), при яких кілька базових класів задають реалізацію методу з одним і тим же ім'ям. Правила гарного проектування вимагають того, щоб у всіх випадках метод мав одну і ту ж сигнатуру (в зв'язку з тим, що порядок викликів визначається під час виконання, тому як він ставиться при зміні ієрархії, і тому що в ланцюзі можуть бути присутніми побратими, невідомі до моменту виконання).

Функція реалізована як частина процесу зв'язування у випадках явних дозволів атрибута через точку, таких як super () .__ getitem __ (name). Робиться це за допомогою реалізації власного __getattribute __ (). використовуваного для пошуку класів в передбачуваному порядку, що приймає до уваги спільне множинне спадкування. Тому super () не підтримує непряме дозвіл з використанням інструкцій або операторів, наприклад super () [name].


Зауважте, що використовувати функцію з двома аргументами можна не тільки в методах.

Без аргументів функція працює тільки всередині класу: необхідні для ідентифікації класу і доступу до методів його об'єкта деталі заповнює компілятор.

Примітка для Python 2
Функція працює тільки з класами нового стилю (явно спадщини від object).

Синоніми пошуку: супер

Схожі статті