이번에는 Magic method에 대하여 알아보겠습니다.
매직 메소드는
몇 가지 예를 들어 알기 쉽게 설명하겠습니다.
예1
n = 100
print(n+100)
이 코드는 n과 100을 더하여 출력하라는 코드입니다. python은 이 코드를 add 메소드를 호출하여 더하는 코드로 인식합니다. 코드를 보시면
예1 print(n.__add__(200))
위에 코드와 이 코드는 같은 코드입니다. 우리가 보는 "+" 기호는 python에서는 위에 add메서드를 호출 합니다.
print(dir(int))
이코드를 보시면 이해가 되실 겁니다. dir은 모든 속성과 메서드를 출력해줍니다.
위에 "print(dir(int))"결과값을 보시는 바와같이 int형 내에는 우리가 아는 add, bool ceil float등 다양한 메서드들이 존재합니다.
예제를 보면서 더 설명하겠습니다.
class Student:
def __init__(self,name,height):
self._name = name
self._height = height
def __str__(self):
return 'Student Class Inof : {} {}' .format(self._name,self._height)
def __ge__(self, x):
print('Called. >> __ge__Method.')
if self._height >= x._height:
return True
else:
return False
def __le__(self, x):
print('Called. >> __le__Method.')
if self._height <= x._height:
return True
else:
return False
def __sub__(self,x):
print('Called. >> __sub__Method.')
return self._height - x._height
# 인스턴스 생성
s1 = Student('James', 181)
s2 = Student('Mie', 165)
인스턴스을 생성한 후 매직메소드를 출력하면서 설명하겠습니다.
print(s1 >= s2)
우리가 보는 ">="는 s1 class인 Student의 ge메서드가 호출되고 s2가 매개변수로 저장되어 출력이 된다.
결과값
print(s1 <= s2)
우리가 보는 "<="는 s1 class인 Student의 le메서드가 호출되고 s2가 매개변수로 저장되어 출력이 된다.
결과값
print('EX2-3 - ', s1 - s2)
우리가 보는 "-"는 s1 class인 Student의 sub메서드가 호출되고 s2가 매개변수로 저장되어 출력이 된다.
결과값
즉, magic method는 class를 만들고 우리가 아는 add sub bool메서드등을 python에서 제공하는 대로가 아닌 내가 원하는 대로 만들 수 있는 것이다.