我有以下代码:
a = str('5')
b = int(5)
a == b
# False
但是,如果我创建 , 的子类int
并重新实现__cmp__
:
class A(int):
def __cmp__(self, other):
return super(A, self).__cmp__(other)
a = str('5')
b = A(5)
a == b
# TypeError: A.__cmp__(x,y) requires y to be a 'A', not a 'str'
为什么这两个不同?python 运行时是否捕获了由 抛出的 TypeErrorint.__cmp__()
并将其解释为一个False
值?有人可以指出我在 2.x cpython 源代码中显示它是如何工作的位吗?