아래 코드와 같이 등호 연산자를 사용하면 false가 출력됩니다.
class Integer: def __init__(self, number): self.number = number n1 = Integer(1) n2 = Integer(1) print bool(n1 == n2)
출력
False
Python은 기본적으로 비교 작업에 개체 식별자를 사용하기 때문입니다.
이 문제를 극복하려면 __eq__function
을 재정의해야 합니다.class Integer: def __init__(self, number): self.number = number def __eq__(self, other): if isinstance(self, other.__class__): return self.__dict__ == other.__dict__ return False n1 = Integer(1) n2 = Integer(1) print bool (n1 == n2) print bool (n1 != n2)
출력
True True
Python 2.x의 경우 __ne__function도 재정의해야 합니다. 이것은 Python 3.x에 필요하지 않습니다. 문서에 따르면 다음이 적용됩니다.
기본적으로 __ne__()은 __eq__()에 위임하고 NotImplemented가 아닌 한 결과를 반전합니다. 비교 연산자 사이에는 다른 암시적 관계가 없습니다. 예를 들어 (x