The actual situation is I'm coding with a immuable set-like datatype XSet which supports XSet(['al']) & XSet(['ah'] = XSet(['ax'] if I declare ax is consists of al and ah
"That" means I can't explian it very well 'cause my english... Now I try to make some mess like this...I know it's not good to wrap all methods...I just try to make code looks good class MyMeta(type): def __init__(cls, name, bases, namespace): type.__init__(cls, name, bases, namespace) # needed? cls.wrap_methods() def methods(cls): return [k for k, v in cls.__dict__.items() if callable(v)] def wrap_methods(cls): for k in cls.methods(): f = cls.__dict__[k] def g(self, *v, **k): rv = f(self, *v, **k) if rv.__class__ is cls: rv = self.__class__() rv.__dict__.update(self.__dict__) return rv setattr(cls, k, g) class Parent(object): __metaclass__ = MyMeta # I prefer class decorator, but I'm using Py2.5 def some_method(self): return Parent() class Child(Parent): pass print Child().some_method() -- http://mail.python.org/mailman/listinfo/python-list