Peter Otten a écrit : (snip) > Anyway, here is one more option to add too the zoo: > >>>> class A(object): > ... def __init__(self, f, x): > ... self._f = f > ... self.x = x > ... @property > ... def f(self): > ... return self._f.__get__(self) > ... def __del__(self): > ... print "deleting" > ...
This is nice but requires that you know in advance how many methods you're going to add and how they will be named (which is not a bad thing in itself - on the contrary - but may not be what the OP is after), and that you can add these methods at instanciation time. A variant could be: class A(object): def __init__(self, x): self.x = x def __getattr__(self, name): target = '_' + name # avoids recursion if hasattr(self, target): func = getattr(self, target) if hasattr(func, '__get__'): return func.__get__(self, type(self)) # nothing found, bye... raise AttributeError( "%s object has no attribute %s" % (self, name) ) a = A(21) a._foo = lambda self: "answer is %s" % (self.x * 2) print a.foo() -- http://mail.python.org/mailman/listinfo/python-list