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

Reply via email to