Search

Magic Method

대분류
언어
소분류
Python
유형
매직 메소드
스페셜 메소드
던더 메소드
주요 레퍼런스
https://tibetsandfox.tistory.com/42
최종 편집 일시
2024/10/27 15:30
생성 일시
2024/07/22 14:08
14 more properties

매직 메소드(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__

각각 +, -, *, / 기호에 매핑되어 해당 연산을 할 때 호출