CONSTRUCT - Adding Functionality to the Overall System
g.brandl-nospam at gmx.net
Tue Sep 19 08:22:41 CEST 2006
>>> I understand that I can use __metaclass__ to create a class which
>>> modifies the behaviour of another class.
>>> How can I add this metaclass to *all* classes in the system?
>>> (In ruby I would alter the "Class" class)
>> You'd have to set
>> __metaclass__ = whatever
>> at the top of each module whose classes are to get the new behavior.
> I think '__metaclass__ = whatever' affects only the creation of classes that
> would otherwise be old-style classes?
If you set __metaclass__ = type, every class in that module will be new-style.
If you set __metaclass__ = MyClass, and MyClass inherits from <type>, every
class in that module will be new-style and have MyClass as a metaclass.
The usual way to create new-style classes, inheriting from object or another
new-style class, works because if no __metaclass__ is defined, the first
base class's class is taken as the metaclass.
More information about the Python-list