더북(TheBook)

코드 7-17이 코드 7-16과 다른 점은 __add__() 메서드가 추가되었다는 것입니다(#1). 앞뒤로 언더바(_)가 두 개씩 붙어 있는 함수는 파이썬이 예약한 함수로 __add__() 메서드도 연산자 오버로딩을 위해 예약된 함수입니다. 함수 구현을 보면 객체의 x좌표와 y좌표에 인자 n을 더한 새로운 xy로 새로운 객체를 만들어 반환합니다. 이렇게 연산자를 오버로딩한 다음 p2 = p1 + 3 코드를 만나면(#2), p1 객체는 인스턴스 메서드 중 __add__() 메서드를 호출합니다. 즉, p1 + 3p1.__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)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.