偶然发现这一点,请考虑以下代码:
class A(object):
pass
class B(object):
pass
a = A()
b = B()
print a > b # False
文档states:
如果未定义
__cmp__()
,__eq__()
或__ne__()
操作,则为class 实例按对象标识(“地址”)进行比较。
在上面的代码中,a
和b
的地址是在运行时:
id(a) # >>> 4499550864
id(b) # >>> 4499682960
因此a > b
产生False
的原因是有道理的,因为a
的地址不大于b
的地址?(这是怎么回事? ?)如果我们考虑上述结论,只需在上面的代码中更改实例创建的位置仍然会a > b
为False
:
b = B()
a = A()
assert id(a) > id(b) # doesn't raises assertion error
print a > b # >>> False (why still False??)
为什么?现在a
的地址是否大于b
的地址? (我猜这是因为没有提出断言错误。)