[Python-Dev] Indexing builtin sequences with objects which supply __int__

Guido van Rossum guido@python.org
Thu, 20 Jun 2002 21:29:30 -0400


[Todd Miller]
> >>There has been some recent interest in the Numeric/numarray community 
> >>for using array objects as indices
> >>for builtin sequences.  I know this has come up before, but to make 
> >>myself clear, the basic idea is to make the
> >>following work:
> >>
> >>class C:
> >>    def __int__(self):
> >>          return 5
> >>
> >>object = C()
> >>
> >>l = "Another feature..."
> >>
> >>print l[object]
> >>"h"
> >>
> >>Are there any plans (or interest) for developing Python in this direction?

[Guido]
> >I'm concerned that this will also make floats acceptable as indices
> >(since they have an __int__ method) and this would cause atrocities
> >like
> >
> >print "hello"[3.5]
> >
> >to work.

[Todd]
> That makes sense.    What if we specifically excluded Float objects from 
> the conversion?   Are there any types that need to be excluded?    If 
> there's a chance of getting a patch for this accepted,  STSCI is willing 
> to do the work.

Hm, an exception for a specific type seems ugly.  What if a user
defines a UserFloat type, or a Rational type, or a FixedPoint type,
with an __int__ conversion?

This points to an unfortunate early design flaw in Python (inherited
from C casts): __int__ has two different meanings -- sometimes it
converts the type, sometimes it also truncates the value.

I suppose you could hack something where you extract x.__int__() and
x.__float__() and compare the two, but that could lead to a lot of
overhead.

I hesitate to propose a new special method, but that may be the only
solution. :-(

What's your use case?  Why do you need this?

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