Python Runtime Method Call Binding
bruno.42.desthuilliers at websiteburo.invalid
Thu Dec 4 15:54:26 CET 2008
k3xji a écrit :
> Is there a way to hook a function call in python? I know __getattr__
> is doing for variables, it is giving us a chance before a field is
Note that since the introduction of the "new-style" object model - that
is, in Python 2.2 -, computed attributes are better handled with the
descriptor protocol, and specially the general purpose 'property' class.
The __getattr__ hook should only be used when you want to handle read
access to an attribute that doesn't exist at all (ie : automatic
Also note that a method is mostly a computed attribute (another
application of the descriptor protocol FWIW)...
> Do we have same functionality for methods?
Which "functionality" ? What do you want to do ? automatically delegate
method calls, or "wrap" method calls so you can ie log them or attach
more behaviour ?
> class Foo(object):
> def __call_method__(self, ...) # just pseudo
> print 'A method is called in object...'
> f = Foo()
Ok, I guess this is the second case. The answer is "decorator".
def _logged(*args, **kw):
print "func", func.__name__, " called with ", args, kw
return func(*args, **kw)
_logged.__name__ = "logged_%s" % func.__name__
_logged.__doc__ = func.__doc__
def method(self, yadda=None):
print "in Foo.method, yadda = ", yadda
f = Foo()
More information about the Python-list