Python 2.x에는 비교 연산자를 오버로드하는 두 가지 방법이 있습니다. __cmp__
또는 __lt__
. 풍부한 비교 오버로드가 선호된다고 하는데 왜 그럴까요?
풍부한 비교 연산자는 각각을 구현하기가 더 간단하지만 거의 동일한 논리로 여러 연산자를 구현해야 합니다. . 그러나 내장된 cmp
및 튜플 순서를 사용할 수 있다면 __cmp__
는 매우 간단해지고 모든 비교를 수행합니다.
class A (객체): def __init__(self, name, age, other): self.name = name self.age = age self.other = other def __cmp__(self, other): assert isinstance(other, A) # 이에 대한 가정 example return cmp((self.name, self.age, self.other), (other.name, other.age, other.other))
이 단순함이 내 요구를 충족시키는 것 같습니다. 6(!)의 풍부한 비교를 모두 오버로드하는 것보다 훨씬 낫습니다. (그러나 "교체된 인수"/반사된 행동에 의존한다면 "그냥" 4로 줄일 수 있지만, 내 겸손한 생각으로는 순전히 복잡성이 증가합니다.)
< strong>__cmp__
만 오버로드하는 경우 알려야 하는 예상치 못한 함정이 있습니까?
<
를 이해합니다. , <=
, ==
등의 연산자는 다른 목적으로 오버로드될 수 있으며 원하는 개체를 반환할 수 있습니다. 나는 그 접근 방식의 장점에 대해 묻는 것이 아니라 숫자에 대해 의미하는 것과 같은 의미로 이러한 연산자를 비교에 사용할 때의 차이점에 대해서만 질문합니다.
업데이트: As Christopher 지시, cmp
가 사라지고 있음 3.x에서 위의 __cmp__
만큼 쉽게 비교를 구현할 수 있는 대안이 있습니까?