매직 메소드(Magic Method)
•
파이썬에서 사용되는 특별한 메소드들
•
== 스페셜 메소드(Special Method) == 던더 메소드(Double UNDERscore Method)
•
이미 파이썬 내에 정의되어 있고, 클래스 내부에서 매직 메소드들을 오버라이딩 하여 사용
•
직접 호출해서 사용하지 않고, 정해진 규칙에 따라 알아서 호출된다
파이썬의 타입
•
파이썬에 존재하는 타입들은 모두 클래스
print(int) <class 'int'>
print(float) <class 'float'>
print(str) <class 'str'>
print(list) <class 'list'>
print(tuple) <class 'tuple'>
print(dict) <class 'dict'>
Python
복사
•
그래서 우리가 사용하는 데이터들은 해당되는 타입 클래스의 인스턴스
그럼 어떻게 자료형끼리의 연산이 가능해지는가?
⇒ 미리 구현된 __add__, __sub__와 같은 매직 메소드들이 연산자에 따라 자동으로 호출되기 때문
print(dir(int))
# int클래스의 수많은 매직 메소드
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__',
'__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__',
'__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__',
'__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__',
'__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__',
'__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__',
'__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__',
'__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__',
'__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__',
'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag',
'numerator', 'real', 'to_bytes']
Python
복사
기본 종류
•
__new__
•
__init__
•
__del__
•
__str__, __repr__
•
__iter__
•
__next__
•
__len__
•
__bool__
•
__add__, __sub__, __mul__, __truediv__
종류
__new__
•
객체를 생성할 때 가장 먼저 실행되는 메소드
•
첫 번째 인자로 클래스 자신이 넘어온다.
•
특수한 상황이 아니면 잘 사용하지 않음
__init__
•
일반적으로 생성자라고 부르는 메소드
•
데이터를 초기화 하는등의 목적으로 사용
__del__
•
객체가 소멸될 때 호출
__str__, __repr__
•
객체의 문자열 표현을 위해 사용
__iter__
•
이터러블한 객체를 만들 때 사용
•
해당 메소드가 구현되었다면 그 객체는 이터러블.
__next__
•
이터레이터를 생성할 때 사용
•
위의 __iter__메소드와 같이 구현하면 그 객체는 이터러블한 이터레이터
__len__
•
객체의 길이를 반환할 때 사용
•
len()함수가 내부적으로 객체의 해당 메소드를 호출
__bool__
•
객체의 boolean 표현을 나타낼 때 사용
__add__, __sub__, __mul__, __truediv__
•
각각 +, -, *, / 기호에 매핑되어 해당 연산을 할 때 호출