[EMAIL PROTECTED] 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... -- http://mail.python.org/mailman/listinfo/python-list