있던 함수를 override를 통해 재사용할 수 있다.
예시
__str__
#print로 출력 해주는
__add__
#+로 더해주는
__sub__
#-로 감해주는
__mul__
#*로 곱해주는
__len__
#거리를 구해주는
https://docs.python.org/3/reference/datamodel.html
위 링크에서 각 기능에 따른 필요한 함수를 찾아볼 수 있다.
연습문제)
복소수 클래스를 정의 해봅시다.
덧셈, 뺄셈, 곱셈 연산자 지원
길이 (복소수의 크기) 지원
복소수 출력 '1 + 4j'와 같이 표현
비교 연산 ==, != 지원
=, <= , <, > 연산 지원
절대값 지원
import math
class ComplexNumber:
def __init__(self, real, img):
self.real = real
self.img = img
def __add__(self, cn):
return ComplexNumber(self.real + cn.real, self.img + cn.img)
def __sub__(self, cn):
return ComplexNumber(self.real - cn.real, self.img - cn.img)
def __mul__(self, x):
if type(x) == int:
return ComplexNumber(self.real * x, self.img * x)
elif type(x) == ComplexNumber:
return ComplexNumber(self.real * x.real - self.img * x.img, self.real * x.img + self.img * x.real )
def __str__(self):
if self.img >0:
return '{} + {}j'.format(self.real, self.img)
else :
return '{} - {}j'.format(self.real, abs(self.img))
#비교연산자 overriding
def __eq__(self,cn):
return self.real == cn.real and self.img == cn.img
def __ne__(self,cn):
return not (self.real == cn.real and self.img == cn.img)
def __abs__(self):
return math.sqrt(self.real ** 2 + self.img ** 2)
a = ComplexNumber(1,2)
b = ComplexNumber(3,5)
print(a * 3)
print(a + b)
abs(a)