次のコードを完成させる最も自然な方法は何ですか?比較演算子を実装する際の混在型の扱い方は?
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
しかし、NotImplementedを返すと機能します。そして、Pythonは独自のデフォルト順序を使用しますが、これはやや恣意的ですが一貫しています。 – user763305