[Python-ideas] Non-boolean return from __contains__

Ian Bicking ianb at colorstudy.com
Tue Jul 27 21:29:19 CEST 2010


On Tue, Jul 27, 2010 at 11:49 AM, Michael Foord <fuzzyman at gmail.com> wrote:

> On 27 July 2010 17:42, Alexander Belopolsky <
> alexander.belopolsky at gmail.com> wrote:
>
>> On Tue, Jul 27, 2010 at 11:59 AM, Guido van Rossum <guido at python.org>
>> wrote:
>> ..
>> >> So it doesn't help that 'in' may return something else than a bool
>> >> because the method is called on the wrong object for your purposes.
>> >
>> > Well that pretty much kills the proposal. I can't believe nobody
>> > (including myself) figured this out earlier in the thread. :-(
>>
>> It may kill a use case or two, but not the proposal.   In the
>> libraries like numpy where all python containers get replaced, this is
>> not an issue.   Also this problem invites __rcontains__ solution,
>
>
>
> Wasn't the lack of an __rcontains__ a problem for the web-sig guys trying
> to work out the bytes / strings issue?
>

I think PJE wanted to implement a string type that was bytes+encoding (as
opposed to using Python's native strings).  You can overload __add__ etc so
everything works, but you couldn't make this work:

  encodedbytes(b'1234', 'utf8') in '12345'

because '12345'.__contains__ would reject the encodedbytes type outright.

__rcontains__ would work because here '12345' would know that it didn't
understand encodedbytes.  It wouldn't work for lists though, as
[].__contains__ can handle *any* type, as it just tests for equality across
all of its members.  So it's not like __radd__ because the original object
can't know that it should defer to the other argument.

-- 
Ian Bicking  |  http://blog.ianbicking.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20100727/1d9212f4/attachment.html>


More information about the Python-ideas mailing list