Python Language The default metaclass


Example

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

>>> type(1)
int

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)
Foo

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

>>> type(Foo)
type

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

>>> type(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.