<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/