본문 바로가기
python

python - 추상클래스(abstract class)

by orangecode 2022. 5. 2.
728x90
추상클래스(abstract class)란

추상클래스란 미구현 추상메소드를 한 개 이상 가지며,

자식클래스에서 해당 추상 메소드를 반드시 구현하도록 강제한다.

 

상속받은 class는 abstract method를 구현하지 않아도, import할 때까지 에러는 발생하지 않으나 객체를 생성할 시 에러가 발생함.

 

### 추상메소드
# 추상메소드 형식
from abc import *
class 추상클래스명(metaclass=ABCMeta):

	@abstractmethod
    	def 추상메소드(self):
        	pass

 

예제) abstract.py 만들기

from abc import *


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

    def show(self):
        print('국가 클래스의 메소드입니다.')

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)

추상 매소드를 작성하지 않았지만 기본적인 클래스의 기능은 작동하는 코드입니다.

class AbstractCountry에 abstract method를 추가합니다.

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


    def show(self):
        print("국가 클래스의 method 입니다.")

    # abstract method 추가하기
    @abstractmethod
    def show_capital(self):
        print("국가의 수도는?")

장식자인 @abstractmethod를 작성하고 abstract method를 작성합니다.

 

 

이제 Korea class에서 상속받는 abstract method를 구현한다.

class Korea(AbstractCountry):
    def __init__(self, name, population, captial):
        self.name = name
        self.population = population
        self.capital = captial

    def show_name(self):
        print("국가 이름은 : " + self.name)

    def show_capital(self):
        super().show_capital()
        print("국가 수도 : " + self.capital)

def show_capital(self):

    super().show_capital()

    print() 

 

def show_capital(self)구문으로 Korea 클래스를 상속받는 abstract method를 구현한다.

 

 

 

 

반응형

댓글