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:
type
, and by far it is the most common metaclassBut 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.