5 ms·
> Sounds like the author of the article has no idea what a multimethod actually is then. :-) The author (me) knows what multimethods are. I did however not fi
by the_mitsuhiko 15y ago
> Sounds like the author of the article has no idea what a multimethod actually is then. :-)
The author (me) knows what multimethods are. I did however not find a better term to refer to the `iter(x)` -> `x.__iter__()` / `x.__getitem__()` concept.
- arethuza 15y agoI'm genuinely interested (not being snarky, honest) - could you explain why you think that expression has anything to do with multimethods? Like I said previously, I'm new to Python and I'm curious what that expression actually means.
- the_mitsuhiko 15y ago> could you explain why you think that expression has anything to do with multimethods? You can override the behavior of a function based on the types involved. For instance ``coerce(a, b)`` calls ``a.__coerce__(b)``. By overriding ``__coerce__`` for one type you can customize this.
- arethuza 15y agoDo you then have to have conditional code in a.__coerce__(b) to check the type of b and do the appropriate thing?
- zephyrfalcon 15y agoBasically yes. Although there are ways around it: http://www.artima.com/weblogs/viewpost.jsp?thread=101605 http://www.artima.com/weblogs/viewpost.jsp?thread=101605
- arethuza 15y agoThanks - that looks quite neat. It seems to me there is a big difference between having a language that is truly based on multimethods and one where it is possible to implement multimethods fairly easily - from what I can see Python looks more like the latter.
- aidenn0 15y agoThat's called "Operator overloading" In this case the operator happens to look like a function, but it's not really any different than a + b -> a.__add__(b)
- DasIch 15y agoThat's not just simple operator overloading. What mitsuhiko refers to is that iter() can iterate over an object not just when you implement __iter__() but also when you implement __getitem__() and __len__(), bool() has similar semantics as do several other functions and operators.
- dschoon 15y agoI've always heard them referred to as "Generic Functions", though the Wikipedia article is annoying opaque. The important quality (in my practical understanding) is that a generic function's specialization is decoupled from the object system -- delegating to `x.__iter__()` doesn't require `x` inheriting a method from a parent; the process `iter(x)` uses to delegate might not even require any type information about `x` at all.