본문 바로가기
개발일지/Python

파이썬 class(클래스) 상속 기초원리7 추상클래스 ABCMeta, abstractmethod

by 개발에정착하고싶다 2022. 5. 20.
320x100
# 추상클래스
# 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
from abc import ABCMeta
from abc import abstractmethod

# 1. 정의가 안되어있고
# 2. 정의를 하위 클래스에서라도 해야한다면
# 정의가 되어야하는 강제성을 지닌 상위 개념의 클래스에
# AirPlane(metaclass=ABCMeta)이런식으로 해준다.
class AirPlane(metaclass=ABCMeta):
# 이것이 첫번째 작업이다.

    # 두번째 작업으로는 정의가 되어야할 함수에 표시를 해줘야한다.
    @abstractmethod
    # 이렇게
    def flight(self):
        pass

    def forward(self):
        print('전진')

    def backward(self):
        print('후진')

# 위의 flight가 정의가 안되어있으니 반드시 여기서 정의하고 가라.
# 라는 일종의 메모같은거다
class AirLiner(AirPlane):

    def __init__(self,c):
        self.color = c

    def flight(self):
        print('시속 400km/h 비행')

    # 위에서 정의에 대한 강제성을 띄고 있는걸 만들어줬더니 작동오류가 안생긴다.
    # 다만, 예감하건데 제2, 제3의 추가 상속받는 클래스가 늘어가면 거기에도
    # 이런 짓을 계속해야하니 보통의 경우엔 작업을 중단할때 표시해주는 메모 용도로
    # 사용해주고 왠만하면 메인 부모 클래스에 구현을 해주는게 바람직 할 것같다는 생각이 든다.

class FighterPlane(AirPlane):

    def __init__(self, c):
        self.color = c

    def flight(self):
        print('시속 800km/h 비행')

al = AirLiner('red')
al.flight()
al.forward()
al.backward()

fl = FighterPlane('red')
fl.flight()
fl.forward()
fl.backward()
300x250