__len__, __iter__, __next__, __contains__ 메서드 이해 및 활용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- Python 개발자 (중급 이상): 커스텀 클래스를 생성하거나 반복 가능한 객체를 구현하는 개발자
- 난이도: 중급 (클래스 및 메서드 기초 지식 필요)
핵심 요약
__len__
: 객체의 길이를 정의 (len()
함수 사용 시)__iter__
: 객체를 반복 가능하게 만듦 (for
루프,in
연산자 등)__next__
: 반복 시 다음 항목을 반환 (__iter__
와 함께 사용)__contains__
:in
연산자의 동작을 정의
섹션별 세부 요약
1. `__len__` 메서드
len(obj)
호출 시__len__
메서드가 자동으로 실행됨- 커스텀 클래스에서
__len__
정의로 객체의 항목 수를 반환 가능 - 예시:
ShoppingCart
클래스에서len(cart)
가 항목 수를 반환
2. `__iter__` 메서드
for
루프,in
연산자, 리스트 컴프리헨션 등에서 사용됨__iter__
를 구현하면 객체가 반복 가능하게 됨- 예시:
Numbers
클래스에서iter(self.data)
를 반환하여 반복 가능
3. `__next__` 메서드
__iter__
와 함께 사용되며, 반복 시 다음 항목을 반환- 커스텀 이터레이터 구현 시
__next__
에서StopIteration
예외 처리 포함 - 예시:
Countdown
클래스에서3, 2, 1, 0
순서로 항목 반환
4. `__contains__` 메서드
in
연산자 사용 시__contains__
메서드가 실행됨- 커스텀 객체에서
in
연산자 동작을 정의 가능 - 예시:
ShoppingCart
클래스에서item in self.items
로 존재 여부 확인
5. 메서드 사용 순서
in
연산자:__contains__
→__iter__
→TypeError
순서로 실행for
루프:__iter__
→__next__
→StopIteration
순서로 실행
결론
- 커스텀 클래스를 반복 가능하게 만들거나
len()
/in
연산자 동작을 정의하려면__len__
,__iter__
,__next__
,__contains__
메서드를 구현 yield
기반 제너레이터 사용이__next__
관리보다 간단할 수 있음- 예시:
class Countdown
에서__next__
로3, 2, 1, 0
순서로 출력 가능