[Python-Dev] misbehaving __contains__

Guido van Rossum guido at python.org
Wed Jan 23 00:51:12 CET 2008


On Jan 22, 2008 3:46 PM, Daniel Stutzbach
<daniel at stutzbachenterprises.com> wrote:
> On Jan 22, 2008 1:26 PM, tomer filiba <tomerfiliba at gmail.com> wrote:
> > >>> class Foo(object):
> > ...     def __contains__(self, key):
> > ...             return 17
> > ...     def __eq__(self, other):
> > ...             return 19
> > ...
> > >>>
> > >>> f=Foo()
> > >>> f == 8
> > 19
> > >>> 8 in f
> > True
>
> There are many places in the C implementation where a slot returns an
> int rather than a PyObject.  There other replies in this thread seem
> to support altering the signature of the slot to return a PyObject.
> Is this setting a precedent that _all_ slots should return a PyObject?
>
> Consider the following third behavior:
>
> >>> class foo(object):
> ...     def __len__(self):
> ...             return 'foo'
> ...
> >>> x = foo()
> >>> len(x)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: an integer is required

Possibly. I guess it depends on the use case. It would be nice to
research this more, e.g. figure out how much code needs to be changed
to make each of these possible changes, and how likely there will be a
use case.

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


More information about the Python-Dev mailing list