这是一个关于文档不清晰的问题。
请考虑以下示例代码:
class Foo(object):
def __eq__(self, other):
print('eq')
f = Foo()
result = None <= f
print result
>>> True
官方文件说:
如果未定义
__cmp__()
,__eq__()
或__ne__()
操作,则按对象标识(“地址”)比较类实例。
Foo
实现__eq__
,因此根据文档,不应调用比较对象id的默认策略。我猜测,实际上,对象id的比较恰好是正在进行的,并且文档是错误的。这是对的吗?
文件是否应该说
如果
__cmp__()
将被调用但未定义,那么这两个对象将按其ID进行比较。
答案 0 :(得分:1)
我认为这是因为None
尚未定义__le__
方法:
class Foo(object):
def __eq__(self, other):
print('eq')
f = Foo()
test1 = None
id( test1 )
id( f )
test1 <= f # id( test1 ) <= id( f ), equals to test1.__le__(f), output True in my machine