Customizing class creation

By default, new-style classes are constructed using type. A class definition is read into a separate namespace and the value of class name is bound to the result of type(name, bases, dict), where name is the name of the class, bases is a list of base classes, and dict is a namespace populated by the class statement.

When the class definition is read, if __metaclass__ is defined. it is used instead of type. The allows classes or functions to be written which monitor or alter the class creation process:

__metaclass__

This variable can be any callable accepting arguments for name, bases, and dict. Upon class creation, the callable is used instead of the built-in type. New in version 2.2.

The appropriate metaclass is determined by the following precedence rules:

The potential uses for metaclasses are boundless. Some ideas that have been explored including logging, interface checking, automatic delegation, automatic property creation, proxies, frameworks, and automatic resource locking/synchronization.