Metaclasses – Making Classes (Not Instances) Smarter
The previous chapters have already shown us how to modify classes and functions using decorators. But that’s not the only option to modify or extend a class. An even more advanced technique for modifying your classes before creation is the usage of metaclasses. The name already gives you a hint as to what it could be; a metaclass is a class containing meta information about a class.
The basic premise of a metaclass is a class that generates another class for you at definition time, so generally you wouldn’t use it to change the class instances, but only the class definitions. By changing the class definitions, it is possible to automatically add some properties to a class, validate whether certain properties are set, change inheritance, automatically register the class with a manager, and many other things.
Although metaclasses are generally considered to be a more powerful technique than (class) decorators...