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:
dict['__metaclass__'] exists, it is used.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.