본문으로 바로가기

파이썬 추상 클래스(abc) 사용하기

category Language/Python 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