Martin P. Hellwig a écrit :
Hi all,
I have been trying out to wrap my mind around the advantages of
decorators and thought I found a use in one of my experiments. (see code
after my sig).
Although it works, I think it should be able to do it better.
My particular problem is that I want to remove an argument (say always
the first one) when the decorated function is called.
However if the function is defined in a class the first argument is self
and thus the second argument should be removed.
You'll have the same problem with a function defined outside a class
then "attached" to the class, ie:
def func(...):
pass
class Foo(object):
pass
Foo.meth = func
Since I like to have a more general DRY approach I want to test if the
decorated function is defined in a class or not thus knowing that the
first argument is self and must be preserved.
Short answer: this makes no sense.
I tried different approaches but all didn't work and looked very
unpythonic (looking at the attributes, descriptors namespaces, id() of
the function, the first argument and the decorator itself).
So is there a way to find out if the first argument is 'self' without
making a false positive if the first argument is a class instance passed
to a function?
The solution to your problem is elsewhere... Read the doc about the
descriptor protocol, and how it's implemented by the function type to
"turn" functions into methods when they are looked up as attribute of a
class...
--
http://mail.python.org/mailman/listinfo/python-list