type.__mro__
Содержит кортеж с родительскими типами, выстроенными в порядке разрешения методов.
Свойство доступно только для чтения.
Порядок разрешения методов (Method Resolution Order — MRO), рассчитанный при помощи алгоритма
Два (из трех — C3) основных правила линеаризации:
1. дети идут раньше родителей;
2. родители идут в порядке перечисления.
Чтобы получить линеаризованную иерархию в виде списка можно воспользоваться методом mro().
Порядок разрешения методов (Method Resolution Order — MRO), рассчитанный при помощи алгоритма
C3
представляет собой линеаризацию (построение линейного вида) иерархии классов. Алгоритм позволяет разрешить возможные конфликтные ситуации при множественном наследовании (конфликт методов, проблема ромба).Два (из трех — C3) основных правила линеаризации:
1. дети идут раньше родителей;
2. родители идут в порядке перечисления.
list.__mro__ # (list, object)
class A(object): pass
class B(A): pass
class C(A): pass
class BC(B, C): pass
BC.__mro__
# (__main__.BC, __main__.B, __main__.C, __main__.A, object)
На заметку
На уровне CPython свойство соответствует слоту tp_mro объекта PyTypeObject.
На заметку
Подробнее о линеаризации можно узнать из видео Super — это супер!.
Чтобы получить линеаризованную иерархию в виде списка можно воспользоваться методом mro().
Синонимы поиска: type.__mro__, type, __mro__
В разделе «type (тип)»:
basestring
Callable (вызываемый)
Container (контейнер)
Context Manager (менеджер контекста)
Descriptor (дескриптор)
Iterator (итератор)
Number (число)
object (объект)
type.__abstractmethods__
type.__base__
type.__bases__
type.__basicsize__
type.__dict__
type.__dictoffset__
type.__doc__
type.__flags__
type.__itemsize__
type.__module__
type.mro
type.__name__
type.__sizeof__
unicode (юникод)
На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.