[Python] 객체의 동등성(Equal) 구현
파이썬에서 동등성을 구현하는 방법을 정리한다.
만약 다음과 같이 데이터 저장 타입이 존재한다고 가정하겠다.
이런 경우에는 Point 자체가 좌표값을 나타내는 데이터이기 때문에, 상황에 따라서 값을 비교해서 처리할 일이 종종 있을 것이다.
이렇게 말이다.
하지만 예상대로 동작하지 않는다.
실질적으로 값이 같음에도 불구하고 같지 않다고 한다.
이는 객체에 대한 비교가 실제로 값을 비교하는게 아니라, 객체의 주소를 비교하는 형태로 동작하기 때문이다.
Java나 다른 언어들과 비슷하다.
저 코드를 의도대로 동작하게 하려면, 저 ==라는 비교연산자 자체를 새로 정의해서 로직을 제어해야 한다.
__eq__는 클래스에 대해 == 연산자를 재정의하는 특수한 함수명이다.
저러면 실제 내부값인 x와 y를 비교하는 것으로 동작은 overriding한다.
그리고 실행해보면, 의도대로 동작할 것이다.
!= 연산자까지 재정의한다면 ne 함수를 구현해야 한다.
그렇다.
예제 코드
class Point:
x: int
y: int
def __init__(self, x: int, y: int) -> None:
self.x = x
self.y = y
pass
pass
def main() -> None:
p: Point = Point(1, 2)
p2: Point = Point(1, 2)
if p == p2:
print("Equal")
else:
print("Not Equal")
pass
main()