매직 메소드(Magic Method)

Sawol·2021년 5월 29일
0

I Need Python

목록 보기
9/13
post-thumbnail

매직 메소드

파이썬에서 클래스를 사용할 때 미리 정의된 메소드를 사용할 수 있는데 미리 정의된 메소드를 매직 메소드라고 한다. 항상 두개의 밑줄로 둘러싸여있다.__init__, __main__
보통 연산자(+,-,*,/)의 동작을 정의할 때 가장 자주 사용된다.

매직 메소드를 사용하는 이유

가장 큰 이유는 매직 메소드를 사용하면 우리가 생성한 클래스를 아주 쉽게 파이썬의 내장함수처럼 동작하도록 만들수 있다. 물론 매직 메소드를 사용하지 않고 만들 수는 있지만, 이미 만들어진 아주 쉬운 방법이 있는데 굳이 어려운 길을 선택할 필요는 없다.

# 매직 메소드를 사용하지 않았을 때
dict1 = {1 : "ABC"}
dict2 = {2 : "EFG"}

dict1 + dict2
Traceback (most recent call last):
  File "python", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

# 매직 메소드를 사용했을 때
class AddableDict(dict):

    def __add__(self, otherObj):
        self.update(otherObj)
        return AddableDict(self)


dict1 = AddableDict({1 : "ABC"})
dict2 = AddableDict({2 : "EFG"})

print (dict1 + dict2)	# {1: 'ABC', 2: 'EFG'}

매직 메소드의 종류

매직 메소드의 종류는 굉장히 많다. 이에 대해서는 공식문서에 잘 정리가 되어있다.
공식 문서가 이해가 안 된다면 여기를 참고하면 된다.

매직 메소드 사용하기

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __eq__(self, other):    # 클래스끼리 == 기호를 쓸 때 호출
        return (self.name == other.age) and (self.age == other.age)

    def __ne__(self, other):    # 클래스끼리 != 기호를 쓸 때 호출
        return self.age != other.age

    def __gt__(self, other):    # 클래스끼리 > 기호를 쓸 때 호출
        return self.age > other.age

    def __str__(self):      # 인스턴스에서 str()이 호출될 때 동작을 정의
        return f'My Name Is {self.name}'

    def __add__(self, other):       # 클래스끼리 더할수 있음
        return self.age + other.age

student_a = Student('펭수', 10)
student_b = Student('신짱구', 5)

# __add__ 매직 메소드
print(student_a+student_b)		# 15
print(student_a.__add__(student_b))	# 15

# __str__ 매직 메소드
print(str(student_a))			# My Name Is 펭수

# __eq__, __ne__, __gt__ 매직 메소드
print(student_a==student_b)		# False
print(student_a!=student_b)		# True
print(student_a>student_b)		# True

0개의 댓글