Ok I fixed this for Zope 2.10 and trunk:

http://svn.zope.org/?view=rev&rev=68459

Florent


Jim Fulton wrote:
Anyway, the acquisition wrapper implementation hasn't been updated to handle
many slots that were added in recent years, including __contains__.

Jim

Florent Guillaume wrote:

Could anybody shed some light on what's happening here:

 >>> from Acquisition import Implicit

 >>> class Impl(Implicit):
...     pass

 >>> class C(Implicit):
...     def __getitem__(self, key):
...         print 'getitem', key
...         if key == 4:
...             raise IndexError
...         return key
...     def __contains__(self, key):
...         print 'contains', repr(key)
...         return key == 5

The class by itself behaves as expected:

 >>> c = C()
 >>> 5 in c
contains 5
True
 >>> 3 in c
contains 3
False

Let's put c in the context of i:

 >>> i = Impl()
 >>> i.c = c

Now why is the following happening? Why is __contains__ not used?

 >>> 3 in i.c # c.__of__(i)
getitem 0
getitem 1
getitem 2
getitem 3
True
 >>> 5 in i.c
getitem 0
getitem 1
getitem 2
getitem 3
getitem 4
False







--
Florent Guillaume, Nuxeo (Paris, France)   Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   [EMAIL PROTECTED]
_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to