multimethods decorator

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Thu Oct 11 06:15:16 EDT 2007


gherzig at fmed.uba.ar a écrit :
>> 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
>>>  >@multimethod(self.__class__)
>>>  >NameError: name 'self' is not defined
>> 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!

If you're surprised, then you'd better learn way more about Python's 
internal (execution model && object model mostly) before continuing with 
multimethods.

>>> So what would be the first argument to @multimethod??
>> A string ?-)

> 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).

>> 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?

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...



More information about the Python-list mailing list