完成以下代码的最自然的方法是什么?如何在实现比较运算符时处理混合类型?
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