Metaclass ========= Snippets about metaclasses. metaclasses 101 --------------- In Python, everything is one object. Take CPython for example, we have PyObject, everything else is inherited from it, and each PyObject has one type attribute, PyTypeObject, actually PyTypeObject is one PyObject by itself too, so PyTypeObject has one type attribute, PyTypeType, PyTypeType has type attribute too, which is PyTypeType itself. So come back to Python, we have object, each object has one type, and the type of ``type`` is ``type``. You can also have a look on this stack overflow question `What is a metaclass in Python `_. Ok, in Python, everything is simple, so you can just treat metaclass as the class that creates a class. This is useful for post-processing classes, and is capable of much more magic(Dangerous though):: class ManglingType(type): def __new__(cls, name, bases, attrs): for attr, value in attrs.items(): if attr.startswith("__"): continue attrs["foo_" + attr] = value del attrs[attr] return type.__new__(cls, name, bases, attrs) class MangledClass: __metaclass__ = ManglingType def __init__(self, value): self.value = value def test(self): return self.value mangled = MangledClass('test') :: >>> mangled.test() Traceback (most recent call last): File "", line 1, in AttributeError: 'MangledClass' object has no attribute 'test' >>> mangled.foo_test() 'test'