코드 7-17이 코드 7-16과 다른 점은 __add__() 메서드가 추가되었다는 것입니다(#1). 앞뒤로 언더바(_)가 두 개씩 붙어 있는 함수는 파이썬이 예약한 함수로 __add__() 메서드도 연산자 오버로딩을 위해 예약된 함수입니다. 함수 구현을 보면 객체의 x좌표와 y좌표에 인자 n을 더한 새로운 x와 y로 새로운 객체를 만들어 반환합니다. 이렇게 연산자를 오버로딩한 다음 p2 = p1 + 3 코드를 만나면(#2), p1 객체는 인스턴스 메서드 중 __add__() 메서드를 호출합니다. 즉, p1 + 3이 p1.__add__(3)으로 변경됩니다. 실행 결과를 보면 x좌표와 y좌표에 3이 더해져 (5, 5)가 된 것을 알 수 있습니다.
연산자 오버로딩을 적용했으므로 Point 객체와 숫자의 덧셈이 항상 가능할 것 같지만 그렇지 않습니다. 다음과 같은 경우를 보죠.
코드 7-18 oop2/oop2_4/point_2.py ②
if __name__= ="__main__": p1 = Point(2, 2) # p2 = p1 + 3 #2 # 코드 7-18을 위한 코드 # 실행하면 오류가 납니다 p2 = 3 + p1 #3 print(p2)