Why is `object` an instance of `type` and `type` an instance of `object`?

Answers to all your questions can be found in this book: Python Types and Objects

UPD: another link to the book. Let me know if it dies too.

The most important parts to answer your questions:

  • Has the type/class of an object also to be an object itself?

Yes, according to the Rule 1 from chapter 1:

“Everything is an object… Any classes that we define are objects, and of course, instances of those classes are objects as well.”

  • Which one is the real base class object or type?

From chapter 2:

“These two objects are primitive objects in Python. We might as well have introduced them one at a time but that would lead to the chicken and egg problem – which to introduce first? These two objects are interdependent – they cannot stand on their own since they are defined in terms of each other.”

Also Luciano Ramalho in his book “Fluent Python” says that this relation can’t be expressed in Python (chapter 21):

“The classes object and type have a unique relationship: object is an
instance of type, and type is a subclass of object. This relationship
is “magic”: it cannot be expressed in Python because either class would
have to exist before the other could be defined. The fact that type is
an instance of itself is also magical.”

So, for your question:

  • How can a class (type) be an instance of itself?

Luciano says that it can’t be expressed in Python too.

  • Is there a possibility to illustrate the relation between the object and the type class?

Many thanks to the author who made this illustration in сhapter 3:

relation between object, type and other classes

Leave a Comment