multimethods decorator

G

Gerardo Herzig

Hi all. Im reading the Gido's aproach using decorators at
http://www.artima.com/weblogs/viewpost.jsp?thread=101605

It looks good to me, but the examples shows the functionality using
functions.
Now, when i try to give this decorator into a method, if i try the

class test(object):
@multimethod(...)
def met(self, ...):

The multimethod decorator needs the types of the arguments, and, if the
met method requires self as the first argument, the multimethod should
look like
@multimethod(self.__class__, bla, ble) or some like that...

Now i know that im wrong, because i have this error
>@multimethod(self.__class__)
>NameError: name 'self' is not defined

So what would be the first argument to @multimethod??

Thanks!!
Gerardo
 
B

Bruno Desthuilliers

Gerardo Herzig a écrit :
Hi all. Im reading the Gido's aproach using decorators at
http://www.artima.com/weblogs/viewpost.jsp?thread=101605

It looks good to me, but the examples shows the functionality using
functions.
Now, when i try to give this decorator into a method, if i try the

class test(object):
@multimethod(...)
def met(self, ...):

The multimethod decorator needs the types of the arguments, and, if the
met method requires self as the first argument, the multimethod should
look like
@multimethod(self.__class__, bla, ble) or some like that...

Now i know that im wrong, because i have this error

Indeed. Neither self (which will only be known at method call time) nor
even the 'test' class (which is not yet defined when the decorator is
executed) are availables.
So what would be the first argument to @multimethod??

A string ?-)

FWIW, there's already an implementation of multiple dispacth by Mr. Eby...
 
G

gherzig

Gerardo Herzig a écrit :
Indeed. Neither self (which will only be known at method call time) nor
even the 'test' class (which is not yet defined when the decorator is
executed) are availables. Doh!

A string ?-)
Ah? And what will that string contains?
FWIW, there's already an implementation of multiple dispacth by Mr. Eby...
Oh yes, i found the dispatch version of multimethods, but i have not tried
it yet. Do you think is better this version than Guido's?

Thanks!
Gerardo
 
B

Bruno Desthuilliers

(e-mail address removed) a écrit :

If you're surprised, then you'd better learn way more about Python's
internal (execution model && object model mostly) before continuing with
multimethods.
Ah? And what will that string contains?

What makes sens for you. Don't forget that Python has very strong
introspection features. Also note that it's not uncommon to use a 2-pass
approach : marking some methods with the decorator, then doing the real
processing in the metaclass (which of course implies a custom metaclass)
or in the __new__ method (in which case this processing will happen on
*each* instanciation).
Oh yes, i found the dispatch version of multimethods, but i have not tried
it yet. Do you think is better this version than Guido's?

I think that dispatch is actually used in a few packages, frameworks or
applications. Is it the case of Guido's stuff ?

Also, IIRC, Guido's snippet is quite less generic than dispatch (which
is based on expression rules, not only on types).

My 2 cents...
 
G

Gerardo Herzig

Bruno said:
(e-mail address removed) a écrit :



If you're surprised, then you'd better learn way more about Python's
internal (execution model && object model mostly) before continuing with
multimethods.
Is not that, is just...it allways make sense to me AFTER someone tells
me!! :)
What makes sens for you. Don't forget that Python has very strong
introspection features. Also note that it's not uncommon to use a 2-pass
approach : marking some methods with the decorator, then doing the real
processing in the metaclass (which of course implies a custom metaclass)
or in the __new__ method (in which case this processing will happen on
*each* instanciation).
Oh well, now you kill me with that one.
I think that dispatch is actually used in a few packages, frameworks or
applications. Is it the case of Guido's stuff ?

Also, IIRC, Guido's snippet is quite less generic than dispatch (which
is based on expression rules, not only on types).
Ok. So im giving dispatch version a chance. Its working nice so far.
Thanks Man!
Gerardo
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top