假設我們定義x = C(['0'])
其中類C通過Python的運算符重載查詢
class C:
def __init__(self,los):
self.los = los
def __lt__(self,right):
if type(right) is C:
return self.los < right.los
elif type(right) is int:
return self.los < [d for d in str(right)]
else:
raise TypeError('unorderable types: C() < '+type_as_str(right)+'()')
x = C(['0'])
print(12<x)
當執行上面的代碼返回「假」定義。 如果我的理解很好,那麼對於12<x
,它將是12.__lt__(x)
,這只不過是type(12).__lt__(12, x)
或int.__lt__(12, x)
。因此,它會嘗試使用標準int
類中的__lt__
方法。但它應該會拋出錯誤信息,因爲此方法不能理解int
與類對象的比較。因此,此異常將在內部進行管理,然後應調用x.__lt__(12)
或type(x).__lt__(x, 12)
。這意味着,最終它應該使用C類
內定義的__lt__
方法,但似乎這個類是永遠不會調用,因爲我試圖把一些版畫在這個__lt__
C
類的方法和print(12<x)
總是返回False
。
請問有人可以詳細解釋一下嗎?