gpt4 book ai didi

python - 包含 python 对象的测试

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:36 25 4
gpt4 key购买 nike

如果我对元素使用任意对象,Python __contains__ 如何处理列表?它会恢复为 is 运算符吗?或者它是否使用 __eq__(如果提供)?

一个简单的测试给出了

class Test: pass

print(Test() in [Test()]) # -> no
a=Test()
print(a in [a]) # -> yes
print(a in [Test()]) # -> no

那么我可以假设它使用引用比较 is 吗?

最佳答案

列表的默认 __contains__ 实现只是将对象与 == (__eq__) 运算符进行比较。正是这个运算符,如果没有为类定义,则默认为 is 的行为。

简而言之,“a in lst”等同于:

def contains(obj, lst):
for item in lst:
if obj == lst:
return True
return False

contains(a, lst)

== 的行为确实改变了 item 是否显式实现了 __eq__,并且默认为对象标识() 否则。

关于python - 包含 python 对象的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com