추상 베이스 클래스 (abc)

1 분 소요

abc(추상 베이스 클래스)는 인터페이스를 정의하는 방법을 제공하면서 덕타이핑을 보완한다. 추상 클래스를 상속하는 클래스들에게 조건에 맞게 동작해야 하는 추상 함수를 강제 구현하도록 지시한다.
일반적인 의미에서 추상 클래스는 하나 또는 하나 이상의 추상 메소드(들)을 포함한다. 여기서 추상메소드란 선언은 되었으나 수행되는 내용이 구현이 되지 않은 메소드를 말한다.
파이썬의 추상 클래스 구현은 abc 모듈을 이용해 구현이 가능하다.

from abc import ABC, abstractmethod
 
class AbstractClassExample(ABC):
 
    def __init__(self, value):
        self.value = value
        super().__init__()
    
    @abstractmethod
    def do_something(self):
        pass

위 예시를 보면 AbstractClassExample class가 ABC 모듈을 상속해서 추상 클래스로 만들었다. do_something에 abstractmethod를 데코레이션해서 반드시 구현하도록 했다.
따라서 아래 코드는 에러가 난다.

class DoAdd(AbstractClassExample):
    pass

x = DoAdd(2)
# out
# TypeError: Can't instantiate abstract class DoAdd with abstract methods do_something

아래와 같이 추상메소드에 실제 구현을 추가해도 상관없다.
그러나 이 경우에도, 추상클래스를 상속받은 AnotherSubclass는 do_something을 정의해야 한다.

from abc import ABC, abstractmethod
 
class AbstractClassExample(ABC):
    
    @abstractmethod
    def do_something(self):
        print("Some implementation!")
        
class AnotherSubclass(AbstractClassExample):

    def do_something(self):
        super().do_something()
        print("The enrichment from AnotherSubclass")
        
x = AnotherSubclass()
x.do_something()

@ 참고

공식문서
ABC에 대해 정리한 위키
ABC와 관련된 PEP-3119 ABC 정리 블로그2