В большинстве типов/классов в Python я могу вызвать .mro()
без аргументов. Но не на type
и его потомков:Почему у metro() на метаклассе есть другая подпись? `descriptor 'mro' объекта 'type' нуждается в аргументе
In [32]: type(4).mro()
Out[32]: [int, object]
In [33]: type(type(4)).mro()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-48a6f7fcd2fe> in <module>()
----> 1 type(type(4)).mro()
TypeError: descriptor 'mro' of 'type' object needs an argument
Оказывается, я могу получить то, что я хочу с type(type(4)).mro(type(4))
, но почему я не могу назвать mro()
прямо как я в другом месте?
Хм, я вижу. Но 'type' также является экземпляром' type' ...! Смешение. – gerrit
Точно так же, как 'object' и' type' являются экземплярами друг друга. Это не похоже на то, что интерпретатор использует 'type' для создания' type' или 'object'. Они являются «элементарными» классами, жестко закодированными в интерпретаторе. –
Я полагаю, что другая путаница заключалась в том, что я считал, что «mro» является классом, потому что я назвал его классом. – gerrit