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