[IronPython] in operator calls __getitem__ on class that has __len__ and __iter__ defined

Glenn Jones glenn.k.jones+ipy at gmail.com
Thu Nov 20 16:23:23 CET 2008


Yet another weirdness, but not a blocker for us:

With this object:

class o(object):
  def __iter__(self):
    print "iter"
    return iter([1, 2, 3])
  def __getitem__(self, index):
    print "getitem"
    return [1, 2, 3][index]
  def __len__(self):
    print "len"
    return 3

CPython:
>>> p = o()
>>> 1 in p
iter
True

IronPython 2 source drop 43741:
>>> p = o()
>>> 1 in p
getitem
True

It looks like CPython is treating it like a sequence and IronPython 2 is
treating it like a dict.

We have worked around this by implementing __contains__

Raised as Issue 19678 on CodePlex.


PS: How can we format code blocks on CodePlex?

Glenn & Orestis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20081120/aa873af9/attachment.html>


More information about the Ironpython-users mailing list