[Python-3000] iostack and Oh Oh
Phillip J. Eby
pje at telecommunity.com
Sat Dec 2 01:43:23 CET 2006
At 12:02 AM 12/2/2006 +0200, tomer filiba wrote:
>i'm +1 on that, but still, as Guido (and others) said, you need a way to
>differentiate a sequence from a mapping, or a list from a string. dispatching
>based on *concrete types*, i.e., isinstance(x, dict), is bad, as it means
>users *must derive* from dict in order to be dispatched as *dict-like*
No, it merely means that they must register for the desired *behavior*. If
they want the same thing to happen for that type as for a dict, then let
them register it explicitly. (e.g. someop[mytype] = someop[dict])
Thinking about things as being "dict-like" (and then desiring to drive
if-then tests off of that) is actually the source of the *problem*, not the
solution.
Guido has argued that it's verbose to have to do this for lots and lots of
operations, but I've not observed any situations in practice where this was
actually required. What usually happens is that concrete type dispatching
perfectly suffices for builtin types and types native to the library that
defines the operation. Integrating that library with other types then
requires registration of the few special cases that are relevant for
*dispatching* (versus simply passing in objects that conform to the
required duck typing).
Thus, interface checking is a duck in wolf's clothing: it looks like it's
an improvement over duck typing or concrete type checks, but actually
isn't. In fact, it's worse because it entices people to use it because it
*looks* "safer" than concrete type checking! (i.e. it appears more
extensible, less error-prone, etc., when it's actually no different in
these respects.)
More information about the Python-3000
mailing list