次のコードがあります。
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'
なぜこの2つは違うのですか?Python ランタイムは、によってスローされた TypeError をキャッチしint.__cmp__()、それを値として解釈していFalseますか? これがどのように機能しているかを示す 2.x cpython ソースのビットを教えてもらえますか?