The default metaclass
suggest changeYou 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.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents