[Python] - Special Method(Magic method)

김진수·2020년 11월 24일
0
post-thumbnail
post-custom-banner

이번에는 Magic method에 대하여 알아보겠습니다.
매직 메소드는

  • 클래스안에 정의할 수 있는 스페셜 메소드이며 클래스를 int, str, list등의 파이썬의 빌트인 타입(built-in type)과 같은 작동을 하게 해준다.
  • +, -, >, < 등의 오퍼레이터에 대해서 각각의 데이터 타입에 맞는 메소드로 오버로딩하여 백그라운드에서 연산을 한다.
  • __init__이나 __str__과 같이 메소드 이름 앞뒤에 더블 언더스코어("__")를 붙인다.

몇 가지 예를 들어 알기 쉽게 설명하겠습니다.

예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에서 제공하는 대로가 아닌 내가 원하는 대로 만들 수 있는 것이다.

profile
백엔드 개발자
post-custom-banner

0개의 댓글