더북(TheBook)

추상 클래스는 독자적으로 인스턴스를 만들 수 없고 함수의 몸체(body)가 없는 추상 메서드(abstract method, C++에서는 순수 가상 함수(pure virtual method))를 하나 이상 가지고 있어야 합니다. 또한 추상 클래스를 상속받는 파생 클래스에서는 추상 메서드를 반드시 오버라이딩해야 합니다. 그렇지 않으면 파생 클래스도 추상 클래스가 되어 인스턴스를 만들 수 없습니다.

Animal 클래스를 추상 클래스로 변경해 볼까요?

코드 7-11 oop2/oop2_2/polymorphism_2.py

from abc import *                   #1

class Animal(metaclass = ABCMeta):  #2
    @abstractmethod
    def eat(self):                #3
        pass
(중략)


먼저 abc(abstract base class의 약자) 모듈을 가져옵니다(#1). #2는 파이썬 문법이라고 생각하고 넘어가도록 하죠. 그런 다음 추상 메서드로 만들고 싶은 메서드 위에 데코레이터 @abstractmethod를 붙여 줍니다(#3). 메서드 구현부를 pass로 해 함수 몸체를 비워 두면 eat() 메서드는 추상 메서드가 됩니다. 앞으로 Animal 클래스를 상속받는 모든 파생 클래스는 내부에 eat() 메서드를 반드시 오버라이딩해야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.