次のコードがあります。
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 ソースのビットを教えてもらえますか?