A minor problem with the section "6.10.2. Membership test operations" from the language reference.
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 76/100
- Issue 类型
- 文档
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- python
调研方向
阅读语言参考中的“6.10.2. Membership test operations”和“3.3.13. Special method lookup”,将成员资格测试的措辞与“3.3.6.”中的可调用对象示例进行比较。更新描述,以准确反映隐式特殊方法查找,然后对照 issue 中的示例和周边参考文本,核实修订后的措辞。
由索引模型根据 Issue 内容生成。
描述
Documentation
The section "6.10.2. Membership test operations" of the language reference contains the following assertion:
For user-defined classes which define the
__contains__()method,x in yreturnsTrueify.__contains__(x)returns a true value, andFalseotherwise.
But it's false; this code:
class _:
def __contains__(self, y):
return True
y = _()
y.__contains__ = lambda y: False
x=1
print(y.__contains__(x))
print(x in y)
Will yield
False
True
To be precise, the current description ignores the special method lookup described in section "3.3.13. Special method lookup". Simply changing it to type(y).__contains__(y, x) will not really solve the issue either, as the last example from section 3.3.13 shows:
class Meta(type):
def __getattribute__(*args):
print("Metaclass getattribute invoked")
return type.__getattribute__(*args)
class C(object, metaclass=Meta):
def __len__(self):
return 10
def __getattribute__(*args):
print("Class getattribute invoked")
return object.__getattribute__(*args)
c = C()
c.__len__() # Explicit lookup via instance
Class getattribute invoked
10
type(c).__len__(c) # Explicit lookup via type
Metaclass getattribute invoked
10
len(c) # Implicit lookup
10
The straightforward fix I can think of is to use the same way of describing it as, say, the "3.3.6. Emulating callable objects" section with:
object.call(self[, args...])
Called when the instance is “called” as a function; if this method is defined,x(arg1, arg2, ...)roughly translates totype(x).__call__(x, arg1, ...).
Turning our problematic expression into
For user-defined classes which define the
__contains__()method,x in yreturnsTrueif the the call to__contains__()method (which roughly translates totype(y).__contains__(y, x)) returnsTrue, otherwiseFalse.
Note that the problem is present from at least Python 3.0 onwards.
Linked PRs
- gh-159046
- 主要语言
- Python
- 星标
- 77.6k
- 派生
- 37.6k
- 平均合并
- 1 天 20 小时
- 30 天内合并 PR
- 608
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
python/cpython 的其他 Issue
-
Docs: problem with page "msvcrt — Useful routines from the MS VC runtime"可能已有人在做 @jikekei 今天认领。 未关闭docs
难度 1/5 1 小时以内 新手友好度 85/100
python/cpython#159072 · 6 条评论 ·
维护者通常 1 天内回复
-
docs
难度 2/5 1-3 小时 新手友好度 62/100
python/cpython#159061 · 1 条评论 ·
维护者通常 1 天内回复
-
3.14 3.15 3.16 stdlib type-bug
难度 2/5 1-3 小时 新手友好度 68/100
python/cpython#159044 · 14 条评论 ·
维护者通常 1 天内回复
-
Docs: socket.htons() and friends raise ValueError for negative input since 3.14可能已有人在做 @vetrovk 于 1 天前认领。 未关闭docs topic-socket
难度 1/5 1-3 小时 新手友好度 78/100
python/cpython#159012 · 1 条评论 ·
维护者通常 1 天内回复
-
stdlib topic-profiling type-bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
相似的 Issue
-
enhancement good first issue
难度 2/5 1-3 小时 新手友好度 78/100
-
python-version
难度 1/5 1 小时以内 新手友好度 88/100
-
bug
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
bug javascript P2-medium python release:v3.1
难度 2/5 1-3 小时 新手友好度 68/100
adrirubio/claude-deck#546 ·
维护者通常 1 天内回复
-
area: desktop area: website priority: P2 type: feature
难度 2/5 1-3 小时 新手友好度 62/100
appandflow/stim#3411 · 1 条评论 ·
维护者通常 1 天内回复