Python 강좌 : 제 43강 - 컨테이너 메서드
컨테이너 메서드(Container Method)
컨테이너(Container)
란 자료형(Data type)
의 저장 모델로 종류에 무관하게 데이터를 저장할 수 있음을 뜻합니다.
문자열, 튜플, 리스트, 사전, 집합 등은 종류에 무관(Container)
한 형식이며, 정수, 실수, 복소수등은 단일 종류(Literal)
한 형식입니다.
컨테이너 메서드(Container Method)
는 위와 같이 종류에 무관하게 저장할 수 있는 자료형의 매직 메서드(Magic Method)
를 뜻합니다.
메서드 정의
- 결과
- length
3
{‘A’: 1, ‘B’: 2, ‘C’: 3, ‘E’: 5}
{1: ‘A’, 2: ‘B’, 3: ‘C’, 5: ‘E’}
1 is contained in Value.
True
__len__ : 길이 반환 메서드
len()
을 호출해 객체의 길이를 반환합니다.
__bool __()
메서드를 정의하지 않은 채 bool()
을 호출하면 __len__
반환 값에 의존합니다.
즉, len()
의 반환값이 0이라면 False
가 반환되며, 0이 아니라면 True
를 반환합니다.
__length_hint__ : 예상 길이 반환 메서드
operator.length_hint()
을 호출해 객체의 예상 길이를 반환합니다.
length_hint()
함수는 len()
함수와 기능과 역할이 흡사합니다.
len()
함수보다 비교적 정확성이 낮지만, length_hint()
는 len()
함수가 반환하지 못하는 range_iterator
형태의 컨테이너도 길이 반환이 가능합니다.
__len__()
메서드와 같이 정의돼 있다면, 우선적으로 __len__()
메서드를 실행합니다.
__len__()
메서드에서 반환하지 못한다면, 그 다음으로 __length_hint__()
메서드를 통해 값을 반환합니다.
__getitem__ : 호출 메서드
self[key]
로 key
값을 호출할 때 실행되는 메서드입니다.
__getitem__()
메서드를 재정의한다면, TypeError
, IndexError
, KeyError
오류 등에 대한 동작을 재정의해야 합니다.
__missing__()
메서드를 재정의했을 때, KeyError
등의 오류가 발생했을 때 별도로 연결시켜야합니다.
__setitem__ : 할당 메서드
self[key] = value
로 key
에 대한 value
로 값을 할당할 때 실행되는 메서드입니다.
호출 메서드와 동일하게 __setitem__()
메서드를 재정의한다면, TypeError
, IndexError
, KeyError
오류 등에 대한 동작을 재정의해야 합니다.
__delitem__ : 제거 메서드
del self[key]
로 key
에 대한 값을 제거할 때 실행되는 메서드입니다.
호출 메서드와 동일하게 __delitem__()
메서드를 재정의한다면, TypeError
, IndexError
, KeyError
오류 등에 대한 동작을 재정의해야 합니다.
__missing__ : 누락 메서드
self[key]
로 key
값을 호출할 때 사전(dictonary)
에 key
값이 없을 때 실행되는 메서드입니다.
__getitem__()
메서드에 의해 호출되며, __getitem__()
를 재정의 했다면, 예제와 같이 직접 호출해야합니다.
__missing__()
메서드는 사전 자료형에 대해서 동작하며, 예제와 같이 Daeheeyun(dict)
로 dict
자료형을 상속받아야 합니다.
- Tip :
사전(dict)
자료형 이외의 컨테이너 자료형은key
가 아닌index
로value
를 호출합니다. 그러므로,KeyError
가 아닌IndexError
가 발생합니다.
__iter__ : 반복자 메서드
iter()
를 호출해 반복자(iterator)
를 반환합니다.
컨테이너 자료형은 iterator
형식의 자료형을 반환해야하며, 사전(dict)
의 경우 Key
로 구성된 iterator
를 반환합니다.
__reversed__ : 반복자 메서드
reversed()
를 호출해 컨테이너의 객체를 역순으로 정렬해 반환합니다.
예제는 사전(dict)
자료형을 사용해 정렬이 불가능하므로, Key
와 Value
를 반대로 정의하는 메서드로 구현하였습니다.
__contains__ : 포함 확인 메서드
operator.contains(self, item)
을 호출해 자료형에 해당 item 값이 존재하는지 확인합니다.
객체에 값(item)
있으면 True
를 반환하며, 존재하지 않다면 False
를 반환합니다.
항상, True
와 False
로만 반환하며, 다른 값을 반환하더라도 0
이 아닌 값은 True
로 간주합니다.
예제는 Key
와 Value
둘 다 검사하여 어느 곳에라도 item
값이 존재하면 True
를 반환합니다.
댓글 남기기