Python3では、6つの豊富な比較演算子
__lt__(self, other)
__le__(self, other)
__eq__(self, other)
__ne__(self, other)
__gt__(self, other)
__ge__(self, other)
個別に提供する必要があります。これは、を使用して省略できますfunctools.total_ordering
。
ただし、これはほとんどの場合、かなり読みにくく、実用的ではないことがわかります。それでも、同様のコードを2つの関数に入れる必要があります。または、さらにヘルパー関数を使用する必要があります。
そのため、ほとんどの場合、PY3__cmp__
以下に示すミックスインクラスを使用することを好みます。これにより、単一の__cmp__
メソッドフレームワークが再確立されます。これは、ほとんどの場合、非常に明確で実用的でした。選択した豊富な比較をオーバーライドすることもできます。
あなたの例は次のようになります:
class point(PY3__cmp__):
...
# unchanged code
PY3__cmp__ミックスインクラス:
PY3 = sys.version_info[0] >= 3
if PY3:
def cmp(a, b):
return (a > b) - (a < b)
# mixin class for Python3 supporting __cmp__
class PY3__cmp__:
def __eq__(self, other):
return self.__cmp__(other) == 0
def __ne__(self, other):
return self.__cmp__(other) != 0
def __gt__(self, other):
return self.__cmp__(other) > 0
def __lt__(self, other):
return self.__cmp__(other) < 0
def __ge__(self, other):
return self.__cmp__(other) >= 0
def __le__(self, other):
return self.__cmp__(other) <= 0
else:
class PY3__cmp__:
pass