Python Language Metaclasses The default metaclass


You may have heard that everything in Python is an object. It is true, and all objects have a class:

>>> type(1)

The literal 1 is an instance of int. Lets declare a class:

>>> class Foo(object):
...    pass

Now lets instantiate it:

>>> bar = Foo()

What is the class of bar?

>>> type(bar)

Nice, bar is an instance of Foo. But what is the class of Foo itself?

>>> type(Foo)

Ok, Foo itself is an instance of type. How about type itself?

>>> type(type)

So what is a metaclass? For now lets pretend it is just a fancy name for the class of a class. Takeaways:

  • Everything is an object in Python, so everything has a class
  • The class of a class is called a metaclass
  • The default metaclass is type, and by far it is the most common metaclass

But why should you know about metaclasses? Well, Python itself is quite "hackable", and the concept of metaclass is important if you are doing advanced stuff like meta-programming or if you want to control how your classes are initialized.