Не задействован (прямой) экземпляр типа object
.Когда вы вызываете Point()
, создается экземпляр Point
, и ничего больше.Наследование - это механизм, который работает с классами , а не с экземплярами .
. У объектов Python есть два свойства: их тип и их значение .Тип из x
равен Point
.Значение из x
представляется его __dict__
, который является пустым (поскольку не имеет атрибутов):
>>> type(x)
<class '__main__.Point'>
>>> x.__dict__
{}
Нет ссылки на экземпляр object
потому что такого экземпляра не существует.Наследование от object
проявляется в классе Point
:
>>> Point.__base__
<class 'object'>
>>> Point.mro()
[<class '__main__.Point'>, <class 'object'>]
Так что причина, по которой x
может использовать object
методы, заключается в том, что Point
наследуется от object
, а не потому, что в x
хранится скрытый экземпляр object
.Вы можете видеть, что Point
имеет доступ ко всем object
методам:
>>> Point.__str__ is object.__str__
True
>>> Point.__init__ is object.__init__
True
# etc...
Таким образом, по доверенности, x
имеет доступ ко всем object
методам.