<code example>
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 31 32 33 34 35 36 37 38 39 40 41 42 | from abc import * class PQBase(ABC): @abstractmethod def add(self, item): pass @abstractmethod def remove_min(self): pass class PQ(PQBase): # implements by unordered list def __init__(self): self._pq = [] def add(self, item): self._pq.append(item) def remove_min(self): pq = self._pq min = pq[0] for i in pq: if min > i: min = i pq.remove(min) return min def is_empty(self): return len(self._pq) == 0 if __name__ == '__main__': pq = PQ() pq.add(5) pq.add(3) pq.add(1) pq.add(2) pq.add(4) while not pq.is_empty(): print(pq.remove_min()) | cs |
1. ABC 클래스를 상속(derive)받는다
2. 필수구현 메서드에 @abstractmethod 데코레이터?를 사용한다
<etc>
작은 규모에서는, 굳이 abc module을 사용하지않고 메서드 각각에
raise Exception('Not Implemented')
를 사용하여 구현하여도 큰 차이 없을듯 하다
multiple inherit class의 경우에는 conflict를 방지하기 위해 ABC 대신 metaclass=ABCMeta를 사용한다는 듯 하다
위 예제 기준에서는 ABC 상속만으로도 충분하다
'Language > python' 카테고리의 다른 글
[python] Django란? (0) | 2017.12.29 |
---|---|
Web 개발의 특징 / Django F/W를 사용해보며 느낀 점 (5) | 2017.12.29 |
[python] logging example (0) | 2017.12.16 |
[python] unittest library - simple example (0) | 2017.12.15 |
[python] numpy 함수들 (0) | 2017.12.14 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/