Python 2.x에는 비교 연산자를 오버로드하는 두 가지 방법 __cmp__
또는 __lt__
. 풍부한 비교 과부하가 선호된다고하지만 이것이 왜 그런가요?
풍부한 비교 연산자는 각각을 구현하는 것이 더 간단하지만 거의 동일한 논리로 여러 연산자를 구현해야합니다. 그러나 내장 cmp
및 튜플 순서를 사용할 수 있다면 __cmp__
매우 간단 해지고 모든 비교를 수행 할 수 있습니다 .
class A(object):
def __init__(self, name, age, other):
self.name = name
self.age = age
self.other = other
def __cmp__(self, other):
assert isinstance(other, A) # assumption for this example
return cmp((self.name, self.age, self.other),
(other.name, other.age, other.other))
이 단순함은 풍부한 비교 6 (!)을 모두 오버로드하는 것보다 훨씬 더 내 요구를 충족하는 것 같습니다. (그러나 "교체 된 주장"/ 반영된 행동에 의존한다면 "단지"4로 낮출 수 있지만, 내 겸손한 의견으로는 순전히 합병증이 증가합니다.)
과부하 만 발생하는 경우 알아야 할 예상치 못한 함정이 __cmp__
있습니까?
나는 이해 <
, <=
, ==
, 등 사업자가 다른 목적을 위해 오버로드 할 수 있으며, 원하는 개체에게 그들이 반환 할 수 있습니다. 나는 그 접근 방식의 장점에 대해 묻는 것이 아니라 숫자를 의미하는 것과 같은 의미에서 비교를 위해 이러한 연산자를 사용할 때의 차이점에 대해서만 묻습니다.
업데이트 : 크리스토퍼으로 지적 , cmp
3.x에서에서 사라지고있다 위와 같이 쉽게 비교를 구현할 수있는 대안이 __cmp__
있습니까?