От какого класса наследуются все типы в python?

Сегодня меня спросили от какого класса наследуются все типы в Python?

Я не долго думая ответил, что от object

На что мне ответили, что от object наследуются в Python2, а в Python3 от type.

Пришел домой. Решил проверить. И обнаружил интересный момент:

class R():
    def __init__(self):
        name = 'MyCl'
a = R()

print(isinstance(a, type))         # False
print(isinstance(a, object))       # True
print(R.__mro__)                   # (<class '__main__.R'>, <class 'object'>) 

Почему так получается? И почему .mro не показывает <class 'type'>?


Ответы (1 шт):

Автор решения: CrazyElf

Можно просто проверить:

!python -V
print(int.__base__)
print(type.__base__)
print(object.__base__)

Вывод:

Python 3.10.0
<class 'object'>
<class 'object'>
None

Итак, в Pyhton 3.10 классы int и type - наследники object, при этом object не является ничьим наследником.

Так что всё как пишут в руководствах - в питоне всё наследуется от object рано или поздно, в том числе и type.

→ Ссылка