Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 여러 피연산자로 연산자 오버로딩하는 방법

파이썬에서 여러 개의 피연산자를 사용하는 연산자 오버로딩은 일반적인 이항 연산자 오버로딩과 동일한 방식으로 구현할 수 있습니다. 예를 들어, 클래스에 대해 + 연산자를 오버로딩하려면 __add__ 매직 메서드(던더 메서드)를 정의하면 됩니다.

동작 원리

핵심은 __add__ 메서드가 반드시 새로운 객체를 반환해야 한다는 점입니다. 반환된 객체가 다시 같은 타입의 인스턴스이기 때문에, a + b + c처럼 연산을 연속으로 연결(chaining)할 수 있습니다. 파이썬은 이 표현식을 왼쪽부터 차례대로 (a + b) + c와 같이 평가합니다.

예제 코드

복소수를 표현하는 클래스에서 + 연산자를 오버로딩하고, 세 개의 객체를 더하는 예제입니다.

class Complex(object):
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    def __add__(self, other):
        real = self.real + other.real
        imag = self.imag + other.imag
        return Complex(real, imag)

    def display(self):
        print(str(self.real) + " + " + str(self.imag) + "i")


a = Complex(10, 5)
b = Complex(5, 10)
c = Complex(2, 2)
d = a + b + c
d.display()

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

17 + 17i

추가 팁

Complex 객체와 일반 숫자처럼 서로 다른 타입 간의 연산도 지원하려면, 오른쪽 피연산자일 때 호출되는 __radd__ 메서드를 함께 정의하는 것이 좋습니다. 또한 지원하지 않는 타입이 들어온 경우 NotImplemented를 반환하면 파이썬이 적절하게 처리해 줍니다.