Maybe you can use __getattribute__. I tried it, but got stuck trying to let __getattribute__ work normal without calling itself.
class A(object): def foo(self): print "hi" class B(A): def __getattribute__(self,name): try: fun = A.__dict__[name] except KeyError: fun = None if fun and callable(fun): self._before_any_method_of_A() result = fun(self) self._after_any_method_of_A() return result else: # do some stuff to act normal try: # erm, this invokes __getattribute__, which will invoke again, # and again, and again... return self.__dict__[name] except KeyError: pass try: return B.__dict__[name] except KeyError: pass def _before_any_method_of_A(self): print "before" def _after_any_method_of_A(self): print "after" b = B() b.foo() greetings, Almar 2008/10/3 TP <[EMAIL PROTECTED]> > Hi everybody, > > I would like to be able to specialize an existing class A, so as to obtain > a > class B(A), with all methods of B being the methods of A preceded by a > special method of B called _before_any_method_of_A( self ), and followed by > a special method of B called _after_any_method_of_A( self ). > > The goal is to avoid to redefine explicitly in B all methods of A. > > Is this possible in Python? > > Thanks a lot > > Julien > > -- > python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.9&1+,\'Z > (55l4('])" > > "When a distinguished but elderly scientist states that something is > possible, he is almost certainly right. When he states that something is > impossible, he is very probably wrong." (first law of AC Clarke) > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list