python中是否存在bug';s(2.7)关于默认比较的文件?

python中是否存在bug';s(2.7)关于默认比较的文件?,python,comparison,nonetype,Python,Comparison,Nonetype,这是一个关于文件不清楚的问题 考虑以下示例代码: class Foo(object): def __eq__(self, other): print('eq') f = Foo() result = None <= f print result >>> True 类Foo(对象): 定义(自身、其他): 打印('eq') f=Foo() 结果=无>>为真 官方文件说: 如果未定义\uuuu cmp\uuuuuuuuuuuuuuuuuuuuu

这是一个关于文件不清楚的问题

考虑以下示例代码:

class Foo(object):
    def __eq__(self, other):
        print('eq')

f = Foo()

result = None <= f
print result
>>> True
类Foo(对象):
定义(自身、其他):
打印('eq')
f=Foo()
结果=无>>为真
官方文件说:

如果未定义
\uuuu cmp\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

Foo
实现了
\uuuuu eq\uuuu
,因此根据文档,不应调用比较对象id的默认策略。我猜想,事实上,对象id的比较正是正在发生的事情,而且文档有缺陷。这是正确的吗

文件应该说

如果将调用
\uuu cmp\uuu()
,但未定义,则将根据其ID比较这两个对象


我认为这是因为
None
没有定义
方法:

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
类Foo(对象):
定义(自身、其他):
打印('eq')
f=Foo()
test1=无
id(test1)
id(f)

测试1你是对的;祝贺你。@minitech:这是讽刺吗?我不知道你是否真的认为这是一个文档错误。如果是的话,我会报告的。不,但我不知道还能说什么。这其实并不是什么bug,它在Python3中已经消失了,因为
\uu cmp\uu
并不存在。严格地说,这没有错,因为它没有说“如果且仅当”。=)@minitech:是的。然而,这是令人困惑的。您的
\uuuuuueq\uuuuu
是为
None==f
调用的,而不是为
='、
\uuuuuuuuuuu`和
\uuuuuuuuuuge\uuuu
在您的类中没有实现。如果定义了
\uuuu le\uuuuu
\uu ge\uuuuu
,则会为相应的运算符调用它们。但是文档似乎仍然是错误的。