完成以下代碼的最自然的方法是什麼?如何在實現比較運算符時處理混合類型?
import functools
@functools.total_ordering
class X:
def __init__(self, a):
self._a = a
def __eq__(self, other):
if not isinstance(other, X):
return False
return self._a == other._a
def __lt__(self, other):
if not isinstance(other, X):
return ... // what should go here?
return self._a < other._a
if __name__ == '__main__':
s = [2, 'foo', X(2)]
s.sort()
print s
只是返回False或True不是一個好主意。考慮這種情況,當你有另一個類似的類Y並且做X('foo') X('foo')。結果可能不一致。 –
user763305
2012-08-07 12:24:35
但是返回NotImplemented不起作用。然後,Python將使用自己的默認排序,這有點武斷,但一致。 – user763305 2012-08-07 12:25:37