我有以下代码:做操作符重载时,python是否强制类型?
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运行时是否捕获由int.__cmp__()
抛出的TypeError,并将其解释为False
值?有人能指出我在2.x cpython源代码中显示这是如何工作的吗?
附注:您知道'__cmp__'在几年前不赞成使用吗?您应该实施丰富比较功能。 – Bakuriu
是的,当我试图找出是否应该在__eq__的实现中引发异常或返回NotImplemented时,就出现了这种情况。我想看看内建的Python类做了什么,并发现这个看起来不一致的例子。 – Chris