안녕하세요. 언제나 휴일, 언휴예요.
이번에는 Python에서 연산자 중복 정의를 다룰거예요.
Python에서는 클래스를 정의할 때 일부 연산에 관한 메서드를 정의할 수 있어요. 이를 위해서는 이미 약속한 메서드 이름을 사용해야 합니다.
더하기는 __add__, 빼기는 __sub__, 곱하기는 __mul__, 나누기는 __div__, 플러스 기호는 __pos__, 마이너스 부호는 __neq__입니다. 이 외에도 __mod__(나머지), __and__(논리곱), __or__(논리합), __xor__(논리 상호 배제), __invert__(논리 부정), __abs__(절대값), __pow__(제곱), __floordiv__(//)입니다.
다음은 복소수 클래스를 정의한 예제 코드입니다. 여기에서는 부호 연산과 사칙 연산에 관하여 연산자 중복 정의를 구현하였습니다. 연산자 중복 정의에 관한 사항은 어떠한 이름으로 정의해야 하는지 말고는 특별한 사항이 없어요.
#연산자 중복 정의 class Complex: def __init__(self,real=0,image=0): self.__real = real self.__image = image def __add__(self,other): real = self.__real+other.__real image = self.__image+other.__image return Complex(real,image) def __sub__(self, other): real = self.__real-other.__real image = self.__image-other.__image return Complex(real,image) def __mul__(self, other): real = (self.__real*other.__real)-(self.__image*other.__image) image = (self.__real*other.__image)+(self.__image*other.__real) return Complex(real,image) def __truediv__(self,other): real_u = (self.__real*other.__real)+(self.__image*other.__image) image_u = (self.__image*other.__real)-(self.__real*other.__image) d_val = (other.__real*other.__real)+(other.__image*other.__image) real = real_u/d_val image = image_u/d_val return Complex(real,image) def __pos__(self): return self def __neg__(self): return Complex(-self.__real, -self.__image) def __str__(self): if(self.__image>=0): return str(self.__real)+"+"+str(self.__image)+"i" else: return str(self.__real)+str(self.__image)+"i" n1 = Complex(2,3) n2 = Complex(3,4) print("n1:",n1) print("n2:",n2) print("+n1:",n1) print("-n1:",-n1) print("n1+n2:",n1+n2) print("n1-n2:",n1-n2) print("n1*n2:",n1*n2) print("n1/n2:",n1/n2)