[Python-3000] Builtin iterator type

Guido van Rossum guido at python.org
Wed Nov 15 07:18:20 CET 2006


On 11/14/06, Bill Janssen <janssen at parc.com> wrote:
> Greg Ewing wrote:
> > Bill Janssen wrote:
> >
> > > Duck typing is a seriously bad idea, forced on Python by the now
> > > obsolete split between built-in types and user-defined types.
> >
> > Non-duck typing is a seriously bad idea, forced
> > on some other languages by static typing. Python
> > is mercifully free of such constraints.
>
> I'm thinking that Mike Orr's question, "are we all talking about the
> same duck-typing", makes sense.  Greg, I'm not suggesting static
> typing -- I much prefer dynamic strong typing.  But what Python has
> now is dynamic weak typing, which makes programs (particularly
> frameworks) fragile.  And it's mainly due to the historical accident
> of not being able to inherit from C-based types in Python 1.x.
>
> I'd like to be able to look at a value and determine which interfaces
> I can safely invoke on it, even if I don't understand its full type.
> I can't (safely) do that by string-matching method names.

I can't completely disagree with everything you say (introspection of
interfaces makes sense, and this is proven by that several frameworks
have implemented an explicit notion of interfaces).

But I object to your claim that it was invented because of the
difference between C and python types/classes in Python versions <=
2.1. The real reason was (and is) that there are no type declarations
in Python, so there is absolutely no reason why you *couldn't* pass
anything with an appropriate append() method to the following
function:

 def foo(x):
  x.append(42)

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-3000 mailing list