추상화클래스(abstract class)란?
구현을 위한 함수 정보(=메소드)만 가진 클래스이며, 상속받는 클래스에서 구현을 강제하기 위해 사용
- 사용법
> import abs (abstract base class의 약자)를 통하여 모듈을 가져오고
상속시킬 클래스 내의 추상메소드 위에 @abc.abstractmethod 를 붙인다.
- 구현예제
1) 부모클래스
import abc
# 부모클래스
class RandomMachine(abc.ABC): # metaclass=abc.ABCMeta(3.4 이하)
# 추상 메소드 (자식 클래스에서는 반드시 구현해야한다)
@abc.abstractmethod
def load(self, iterobj):
"""
내용이 없는 함수
"""
# 추상 메소드
@abc.abstractmethod
def pick(self, iterobj):
"""
내용이 없는 함수
"""
# 일반 메소드
def inspect(self):
items = []
while True:
try:
items.append(self.pick())
except LookupError:
break
return tuple(sorted(items))
2) 자식클래스
import random
class CraneMachine(RandomMachine):
def __init__(self, items):
self._randomizer = random.SystemRandom()
self._items = []
self.load(items)
# 내용 구현 (Overriding)
def load(self, iterobj):
self._items.extend(iterobj) # 리스트에 리스트 추가
self._randomizer.shuffle(self._items)
# 내용 구현 (Overriding)
def pick(self):
try:
return self._items.pop()
except IndexError:
raise LookupError('Empty Crane Box')
def __call__(self):
return self.pick()
3) 상속관계 확인
# 서브 클래스 확인
print(issubclass(RandomMachine, CraneMachine)) # False
print(issubclass(CraneMachine, RandomMachine)) # True
# 상속 구조 확인
print(CraneMachine.__mro__) # (<class '__main__.CraneMachine'>, <class '__main__.RandomMachine'>, <class 'abc.ABC'>, <class 'object'>)
'Python' 카테고리의 다른 글
제네레이터(Generator)란? (0) | 2020.03.26 |
---|---|
클로저 (Closure) (0) | 2020.03.24 |
PEP8 이란? (0) | 2020.03.19 |
collections 의 모듈 namedtuple (네임드튜플) (0) | 2020.03.17 |
Instance(인스턴스) 메소드와 Class(클래스) 메소드 (0) | 2020.03.17 |