homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author r.david.murray
Recipients docs@python, r.david.murray
Date 2011年05月03日.20:47:09
SpamBayes Score 2.1333947e-06
Marked as misclassified No
Message-id <1304455631.01.0.264040156642.issue11988@psf.upfronthosting.co.za>
In-reply-to
Content
The following code:
--------------------------------
class X(list):
 def __contains__(self, key):
 print('X contains:', key)
class Y():
 def __init__(self, x):
 self.x = x
 def __getattr__(self, key):
 return getattr(self.x, key)
 def __iter__(self):
 print('Y iter')
 return iter([1,2])
x = X()
y = Y(x)
print('res:', 1 in y)
-----------------------------
prints True. It has been explained to me that this is because of:
http://docs.python.org/reference/datamodel.html#special-method-lookup-for-new-style-classes
However, there is no way in the world that I would guess the behavior above from the documentation provided (and I find it surprising...I expected x's __contains__ to get called because Y (a class, not an instance) doesn't have a __contains__ method).
Can anyone explain it more clearly and update the documentation?
History
Date User Action Args
2011年05月03日 20:47:11r.david.murraysetrecipients: + r.david.murray, docs@python
2011年05月03日 20:47:11r.david.murraysetmessageid: <1304455631.01.0.264040156642.issue11988@psf.upfronthosting.co.za>
2011年05月03日 20:47:09r.david.murraylinkissue11988 messages
2011年05月03日 20:47:09r.david.murraycreate

AltStyle によって変換されたページ (->オリジナル) /