Есть ли что-то вроде OldStyleClass.mro()?

Я пытаюсь понять MRO в классах старого стиля. Было бы удобно иметь эквивалент для NewStyleClass.mro() (или NewStyleClass.__mro__).

Есть ли что-то вроде OldStyleClass.mro()? Возможно, быстрый и простой способ смоделировать это?


person Yyttsa    schedule 17.07.2018    source источник
comment
Вы делаете класс старого стиля классом нового стиля?   -  person Klaus D.    schedule 17.07.2018
comment
Классы старого стиля уже давно устарели, я бы сосредоточился исключительно на новом стиле.   -  person jonrsharpe    schedule 17.07.2018
comment
Допустим, я использую Python 2.7.x и имею class A: pass and class B(A):pass или что-то гораздо более сложное. Я хочу узнать от самого Python, как работает DLR в старом стиле. Надеюсь, это то, о чем вы спрашивали.   -  person Yyttsa    schedule 17.07.2018
comment
Я не собираюсь использовать старые классы. Я просто хочу знать, как они работали (или, возможно, меня заставят, кто знает).   -  person Yyttsa    schedule 17.07.2018


Ответы (1)


Вы можете использовать ресурсы модуля inspect с классами старого стиля:

class A:  # "old" style class
    pass

class B(A):
    pass

hasattr(B, '__mro__')
# -> False

import inspect
print inspect.getmro(B)
# -> (<class __main__.B at 0x7f1b5ee1b530>, <class __main__.A at 0x7f1b5ee1b4c8>)
person glenfant    schedule 17.07.2018
comment
Только что проверил с Python 2.7, не знаю с другими, когда я использую новые классы стиля с годами. - person glenfant; 17.07.2018