728x90
매직 메서드란?
매직 메서드는 파이썬의 특수한 메서드로, 던더(double underscore, __)로 시작하고 끝나는 이름을 가지고 있음
특정한 문법이나 동작을 제공하거나 클래스의 특정한 동작을 변경하거나 확장하는 데 사용됨
매직메서드의 종류
일반적으로 사용되는 매직 메서드
- __init__
- 이 메서드는 클래스의 인스턴스가 생성될 때 호출되는 초기화 메서드로, 주로 객체의 속성을 초기화하고 초기 상태를 설정하는 데 사용
- __repr__ 및 __str__
- 객체의 문자열 표현을 반환
- __repr__: 객체의 "official" 문자열 표현을 반환하는 메서드로, 객체를 재생성할 수 있는 문자열을 반환 (개발자용으로 사용됨)
- __str__: 객체의 "informal" 문자열 표현을 반환하는 메서드로, 사용자에게 보여주기 위한 문자열을 반환
- __len__
- 객체의 길이를 반환 len() 함수가 호출될 때 사용됨
- 리스트, 튜플, 문자열 등과 같은 내장된 시퀀스 형식들은 모두 __len__ 메서드를 구현하여 길이 반환 가능
- __getitem__ 및 __setitem__
- 이 두 메서드는 객체의 인덱싱 및 슬라이싱을 지원
- __getitem__: 인덱싱 및 슬라이싱을 통해 요소를 가져오는 메서드
- __setitem__: 인덱싱을 통해 요소에 값을 할당하는 메서드
- __iter__ 및 __next__
- 두 메서드는 객체의 이터레이션을 지원
- __iter__: 이터레이터를 반환하는 메서드로, 이터레이터 프로토콜을 지원하여 객체를 반복할 수 있게 함
- __next__: 다음 값을 반환하는 메서드로, 이터레이터의 다음 요소를 반환
연산자 오버로딩을 위한 매직 메서드
- __add__(self, other)
- 덧셈 연산자(+)를 오버로딩
- 객체와 다른 객체를 더한 결과를 반환
- __sub__(self, other)
- 뺄셈 연산자(-)를 오버로딩
- 객체에서 다른 객체를 뺀 결과를 반환
- __mul__(self, other)
- 곱셈 연산자(*)를 오버로딩
- 객체와 다른 객체를 곱한 결과를 반환
- __truediv__(self, other)
- 나눗셈 연산자(/)를 오버로딩
- 객체를 다른 객체로 나눈 결과를 반환
- __floordiv__(self, other)
- 나눗셈 연산자의 몫(//)를 오버로딩
- 객체를 다른 객체로 나눈 몫을 반환
- __mod__(self, other)
- 나머지 연산자(%)를 오버로딩
- 객체를 다른 객체로 나눈 나머지를 반환
- __pow__(self, other[, modulo])
- 거듭제곱 연산자(**)를 오버로딩
- 객체를 다른 객체의 거듭제곱으로 계산한 결과를 반환
- __eq__(self, other)
- 동등성 비교 연산자(==)를 오버로딩
- 객체가 다른 객체와 동일한지를 확인하는 데 사용
- __lt__(self, other), __gt__(self, other), __le__(self, other), __ge__(self, other)
- 대소 비교 연산자(<, >, <=, >=)를 오버로딩
- 객체를 다른 객체와 비교하여 대소 관계를 확인하는 데 사용
컨텍스트 관리를 위한 매직 메서드
- __enter__(self)
- 컨텍스트가 시작될 때 호출되는 메서드
- 이 메서드는 with 블록의 시작에서 호출되며, 컨텍스트 진입 시 수행해야 하는 작업을 정의
- 일반적으로 컨텍스트 진입 시 초기화 작업이나 리소스를 할당하는 작업을 수행
- 이 메서드는 with 문에 의해 생성된 컨텍스트 매니저를 반환
- __exit__(self, exc_type, exc_value, traceback)
- 컨텍스트가 종료될 때 호출되는 메서드
- 이 메서드는 with 블록에서 예외가 발생했더라도 항상 호출
- 컨텍스트 종료 시 정리 작업을 수행하거나 예외 처리를 위한 로직을 구현 가능
- 만약 예외가 발생했을 경우에는 exc_type, exc_value, traceback 파라미터에 예외 정보가 전달됨
매직 메서드를 사용한 커스텀 데이터 구조 및 동작 정의 예시
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
# 벡터의 덧셈 연산을 정의
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
# 벡터의 뺄셈 연산을 정의
def __sub__(self, other):
return Vector(self.x - other.x, self.y - other.y)
# 벡터의 스칼라 곱셈 연산을 정의
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
# 벡터의 크기(길이)를 반환하는 메서드를 정의
def __abs__(self):
return (self.x ** 2 + self.y ** 2) ** 0.5
# 벡터의 문자열 표현을 정의
def __str__(self):
return f"({self.x}, {self.y})"
# 사용 예시
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print("v1 =", v1)
print("v2 =", v2)
print("v1 + v2 =", v1 + v2) # 벡터 덧셈
print("v1 - v2 =", v1 - v2) # 벡터 뺄셈
print("v1 * 2 =", v1 * 2) # 스칼라 곱셈
print("|v1| =", abs(v1)) # 벡터 크기(길이)
참고
매직메서드소개 : https://wikidocs.net/83755
728x90
'Python' 카테고리의 다른 글
파이썬 사용자 정의 에러 (0) | 2024.04.02 |
---|---|
데코레이터 (0) | 2024.04.01 |
파이썬 공부할 책 모음 (0) | 2024.03.28 |
파이썬 Iterable, Iterator, Generator 간단 소개와 활용 예제 (0) | 2024.03.21 |
pydantic_settings를 이용한 환경설정 (0) | 2024.03.16 |