티스토리 뷰
[edu] custom sequence: 커스텀 시퀀스 (__getitem__, __len__, __iter__)
burningrizen 2019. 1. 24. 13:25파이썬 클래스가 내장 시퀀스(dict, tuple, list, str 등) 처럼 동작 하도록 하는 방법은 여러가지가 있다.
클래스 매직 매소드를 이용하여 강력한 기능을 구현해 보자
class Coo:
def __init__(self):
self.info = list()
def add(self, item):
self.info.append(item)
def remove(self, index):
self.info.pop(index)
def __contains__(self, item):
return item in self.info
def __iter__(self):
return iter(item for item in self.info)
def __getitem__(self, index):
return self.info[index]
def __setitem__(self, key, value):
self.info[key] = value
def __delitem__(self, key):
del self.info[key]
def __reversed__(self):
return reversed(self.info)
def __len__(self):
return len(self.info)
cs = Coo()
cs.add(1)
cs.add(2)
# del cs[1]
cs[0] = 99
print([c for c in reversed(cs)])
print(1 in cs)
print(len(cs))
[__len__]
컨테이너의 길이를 반환한다. 불변 및 가변 컨테이너에 대한 프로토콜의 일부
[__getitem__]
self[key] 표기법을 사용하여 항목에 엑세스 할때 동작을 정의한다.
이것은 가변 프로토콜과 불가변 프로토콜의 일부, type error, key error 발생할 수 있다.
[__setitem__]
self[key] = value 표기법을 사용하여 항목이 할당된 경우 동작을 정의.
key error, type error 발생할수 있다.
[__delitem__]
항목이 삭제 된 경우의 동작을 정의한다.
del self[key]
유효하지 않은 키가 사용되면 예외 발생.
[__iter__]
컨테이너에 대한 반복자를 반환해야 한다.
반복자는 많은 컨텍스트에서 반환됩ㄴ다. 특히 iter() 내장함수와 for x in container: 형태를 사용하여
컨테이너가 반복될 떄 가장 많이 볼 수 있다.
반복자 자체가 객체이며 자체를 반환하는 __iter__ 매서드를 정의해야 한다.
enumerate, 멤버십 테스트를 가능하게 한다.
[__reversed__]
내장함수의 동작을 구현하기 위해 호출된다.
시퀀스 클래스가 list, tuple 같이 정렬된 경우에만 구현하기 바란다.
[__contains__]
in, not in 과 같은 멤버십 테스트에 대한 동작을 정의한다.
이것이 정의 되어 있지 않을 때 시퀀스를 반복하여 찾고 있는 항복을 발견하면 True 을 반환한다.
[__missing__]
dict의 서브 클래스에서 사용된다. 없는 key를 엑세스 할때 정의한다.
'python lecture > basic' 카테고리의 다른 글
[edu] 컬렉션에서 아이템 찾기 (검색 성능) (0) | 2019.01.24 |
---|---|
[edu] 사용하지 않을 변수 만들기 ( _ ) (0) | 2019.01.24 |
[edu] 오버로딩, 오버라이딩 (연산자, 함수) (0) | 2019.01.24 |
[edu] 리스트 (list) (0) | 2019.01.23 |
[edu] 익명함수 람다 (lambda) (0) | 2019.01.22 |
- Total
- Today
- Yesterday
- pycrypto
- 플러스친구 자동응답
- PuTTYGen
- 이미지 비교
- 문과 코딩
- GIT
- 파이썬 독학
- 파이썬 입문
- django chatbot
- admin.py
- gitignore
- wsgi
- 면접답변
- 장고 카톡 자동응답
- chatbot
- 파이썬 강좌
- 엑셀 비교
- virtualenv
- 파이썬
- 모바일 테마 적용
- 장고
- 면접정답
- 모바일 스킨 적용
- django
- 문서 비교
- Tistory
- gitlab
- 파이썬 프로그래밍
- Python
- 장고 플러스친구 자동응답
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |