AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

__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 순서로 출력 가능