상세 컨텐츠

본문 제목

[파이썬(Python)] #28 매직 메소드(magic methods)

python

by 빨간눈동자 2021. 9. 27. 18:47

본문

반응형

클래스안에 정의된 함수를 우리는 메소드라고 부른다. 이 중 "__"으로 시작하는 메소드를 "매직 메소드"라고 한다. 

매직 메소드의 종류는 아래와 같다. 

 

dir() 함수를 통해 str class를 상속받은 사용자 정의 class가 어떤 함수와 변수를 가지고 있는지 확인해 보자.  

class Func(str):
    pass

my_func = Func()
print(dir(my_func))

위 결과 중 __xxx__ 형태의 함수를 매직 메소드(magic method)라고 한다. 

 

class Func(str):
    def __init__(self):
        self.str = "Hello"

my_func = Func()
print(my_func.str)

 

위 예제의 결과는 아래와 같다. 

 

 

이제 아래 코드처럼 "+" 연산자를 사용하는 코드를 추가해 보자. 

 

class Func(str):
    def __init__(self):
        self.str = "Hello"

my_func = Func()
result = my_func + "Python"    # ADD
print(result)

 

의도한 결과는 HelloPython이라는 결과인데.. 실제 결과는 Python만 출력되고 있다. 

오버라이드 기법을 사용하여 위 문제를 해결해보자. 

 

class Func(str):
    def __init__(self):
        self.str = "Hello"
    def __add__(self, other):
        print("__add__")
        return self.str + "--" + other
       
my_func = Func()
result = my_func + "Python"
print(result)

 

매직 메소드(magic method) __add__()는 + 연산자와 mapping된다. 

__add__()를 재정의함으로써, 사용자 정의 Func class도 + 연산자를 사용할 수 있게 되었다. 

 

객체의 종류에 따라 사용할 수 있는 메소드와 변수가 다르다. 

위 예제에서는 str class를 상속받은 객체를 사용하여 dir() 함수를 실행했었다. 

 

class Func(list):
    pass

my_func = Func()
print(dir(my_func))

 

list 클래스를 상속받은 Func class의 객체를 사용하여 dir() 를 수행하면, 아래와 같이 str class와는 다름을 알 수 있다. 

 

반응형

관련글 더보기