관리 메뉴

FU11M00N

[Python] 추상 클래스 본문

Programming/Python

[Python] 추상 클래스

호IT 2020. 11. 24. 15:16

- 추상 클래스


 메소드의 이름만 가지고 있다가 상속받는 클래스에서 메소드 구현을 강제하기 위해 사용

 상속을 통해서 자식 클래스에서 인스턴스를 생성해야함

 

 


 - 추상클래스의 특징

• 자신의 인스턴스를 생성할 수 없음
• 추상 클래스는 오직 상속에서만 사용
• 각각의 독립된 공통적인 기능이 값을 공유하면 안되므로 구현하지 않은
메소드를 사용

 

 

 

 

 

- 추상 클래스를 정의할 때

 


-먼저 추상 클래스를 만들려면 import로 abc 모듈을 가져와야함(abc는 abstract base class의 약자)

 

-from abc import *

• 클래스의 ( ) 안에 metaclass=ABCMeta를 지정하고 메소드를 만들
때 위에 @abstractmethod 데코레이터를 붙여서 추상 메소드로 지


• 추상 메소드는 상속을 받은 하위 클래스에서 반드시 재정의 해야함

 

 

from abc import*

class StudentBase(metaclass=ABCMeta):
    @abstractmethod
    def study(self):
        pass
    def go_to_school(self):
        pass
    def greeting(self):
        print("Hello")
class Student(StudentBase):
    def study(self):
        print("공부하기")
    def go_to_school(self):
        print("학교가기")
james = Student()
james.study()

결괏 값 1

from abc import *

class AbstractCountry(metaclass= ABCMeta):
    name= "국가명"
    population = "인구"
    capital = "수도"

    def show(self):
        print("국가 클래스의 메소드 입니다")
    @abstractmethod
    def show_capital(self):
        super().show_capital()
class Korea(AbstractCountry):
    def __init__(self,name,population,capital):
        self.name= name
        self.population = population
        self.capital = capital
    def show_name(self):
        print("국가 이름은 : ", self.name)
    def show_capital(self):
        print("{0} 수도는 {1} 입니다.".format(self.name, self.capital))
a= Korea("대한민국", 50000000 , "서울")
a.show_name()
a.show_capital()

결괏 값 2

#abc_crawlerBase.py

from abc import *

class CrawlerBase(metaclass= ABCMeta):
    @abstractmethod
    def run(self):
        pass
    @abstractmethod
    def parse_html(self,text):
        pass
#abc_daum_news_crawler.py
from abc_crawlerBase 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()
# abc_naver_news_crawler.py

from abc_crawlerBase import CrawlerBase

class NaverNewsCrawler(CrawlerBase):
    def run(self):
        print("naver run")
    def parse_html(self,text):
        pass
if __name__ == "__main__":
    naver_news_crawler = NaverNewsCrawler()
    naver_news_crawler.run()

 

'Programming > Python' 카테고리의 다른 글

[Python] Property  (0) 2020.11.24
[Python] 다형성  (0) 2020.11.24
[Python]다중 상속  (0) 2020.11.24
[Python] 상속, 메소드 오버라이딩  (0) 2020.11.17
[Python] 파이썬으로 구현한 연봉 인상율 프로그램  (0) 2020.11.17
Comments