Language/Python
파이썬 추상 클래스(abc) 사용하기
jvvp512
2020. 8. 10. 03:36
728x90
abc(abstract base class)
-
파이썬에서 추상 베이스 클래스(ABC)를 정의하기 위한 기반 구조를 제공한다.
-
추상 클래스는 메서드의 목록만 가진 클래스이며 상속받는 클래스에서 메서드를 구현하지 않으면 에러를 발생한다.
abc — 추상 베이스 클래스 — Python 3.8.5 문서
abc — 추상 베이스 클래스 소스 코드: Lib/abc.py 이 모듈은, PEP 3119에서 설명된 대로, 파이썬에서 추상 베이스 클래스 (ABC) 를 정의하기 위한 기반 구조를 제공합니다; 이것이 왜 파이썬에 추가되었�
docs.python.org
예제 1
추상 클래스에서 정의한 메서드를 구현하지 않으면 다음과 같이 에러를 발생합니다.
from abc import *
class CrawlerBase(ABC):
@abstractmethod
def run(self):
pass
@abstractmethod
def parse_html(self, text):
pass
class DaumNewsCrawler(Crawler):
def run(self):
print('run')
# def parse_html(self, text):
# pass
if __name__ == '__main__':
daum_news_crawler = DaumNewsCrawler()
daum_news_crawler.run()
TypeError: Can't instantiate abstract class DaumNewsCrawler with abstract methods parse_html
예제 2
추상 클래스를 import 해서 사용하기
crawer_base.py
from abc import *
class CrawlerBase(ABC):
@abstractmethod
def run(self):
pass
@abstractmethod
def parse_html(self, text):
pass
daum_news_crawer.py
from crawler_base import CrawlerBase
class DaumNewsCrawler(CrawlerBase):
def run(self):
print('daum run')
def parse_html(self, text):
pass
if __name__ == '__main__':
daum_news_crawler = DaumNewsCrawler()
daum_news_crawler.run()
naver_news_crawer.py
from crawler_base import CrawlerBase
class NaverNewsCrawler(CrawlerBase):
def run(self):
print('naver run')
def parse_html(self, text):
pass
if __name__ == '__main__':
daum_news_crawler = NaverNewsCrawler()
daum_news_crawler.run()
daum run
naver run