Python Example
In Python, the builtin class type
is a metaclass. Consider this simple Python class:
At run time, Car
itself is an instance of type
. The source code of the Car
class, shown above, does not include such details as the size in bytes of Car
objects, their binary layout in memory, how they are allocated, that the __init__
method is automatically called each time a Car
is created, and so on. These details come into play not only when a new Car
object is created, but also each time any attribute of a Car
is accessed. In languages without metaclasses, these details are defined by the language specification and can't be overridden. In Python, the metaclass, type
, controls these details of Car
's behavior. They can be overridden by using a different metaclass instead of type
.
The above example contains some redundant code to do with the four attributes make
, model
, year
, and color
. It is possible to eliminate some of this redundancy using a metaclass. In Python, a metaclass is most easily defined as a subclass of type
.
This metaclass only overrides object creation. All other aspects of class and object behavior are still handled by type
.
Now the class Car
can be rewritten to use this metaclass. This is done in Python 2 by assigning to __metaclass__
within the class definition (in Python 3 you provide a named argument, metaclass=M to the class definition instead):
Car
objects can then be instantiated like this:
Read more about this topic: Metaclass