有关默认比较的python'(2.7)文档中是否存在错误?

时间:2014-07-16 03:30:55

标签: python comparison nonetype

这是一个关于文档不清晰的问题。

请考虑以下示例代码:

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进行比较。

1 个答案:

答案 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