> After 5 years of Python, I still find it impressive how much > vodoo and mojo one can do here :-)
True ;) However, I should point out that I never use this stuff in production code. I have found out that for my typical usages metaclasses are too much: a class decorator would be enough and much less fragile. At the present, we do not have class decorators, but we can nearly fake them with a very neat trick: def thisclass(proc, *args, **kw): """ Example: >>> def register(cls): print 'registered' ... >>> class C: ... thisclass(register) ... registered """ # basic idea stolen from zope.interface, which credits P.J. Eby frame = sys._getframe(1) assert '__module__' in frame.f_locals # inside a class statement def makecls(name, bases, dic): try: cls = type(name, bases, dic) except TypeError, e: if "can't have only classic bases" in str(e): cls = type(name, bases + (object,), dic) else: # other strange errors, such as __slots__ conflicts, etc raise del cls.__metaclass__ proc(cls, *args, **kw) return cls frame.f_locals["__metaclass__"] = makecls Figured you would like this one ;) Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list