클래스안에 정의된 함수를 우리는 메소드라고 부른다. 이 중 "__"으로 시작하는 메소드를 "매직 메소드"라고 한다.
매직 메소드의 종류는 아래와 같다.
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와는 다름을 알 수 있다.
[파이썬(Python)] #29 YAML 파일 다루기 (0) | 2021.09.29 |
---|---|
[파이썬(Python)] #27 None Value (0) | 2021.09.28 |
[파이썬(Python)] #26 문자열 템플릿 (string template) (2) | 2021.09.27 |
[파이썬(Python)] #25 상속 (0) | 2021.09.17 |
[파이썬(Python] #24 클래스(class) / 객체(instance) / __new__ / __init__ (0) | 2021.09.17 |