정의
Python에서는 단순한 상속 만으로도 추상 클래스와 유사하게 구현을 할 수 있는데 말이다. 그 이유는 단순한 상속보다 좀 더 엄격(strict)하게 하기 위함이다. 위의 abstractmethod를 구현하지 않으면 에러를 터트리므로 어느정도의 강제성을 부과할 수 있다. 이로써 프로그램을 안정적으로 실행시킬 수 있는 것이다.
다른 언어들은 다중 상속 지원X. Python은 다중 상속 지원.
Interface를 사용할 필요가 없다. 추상 클래스를 여러개 만들어 사용하면 된다.
예제
from abc import *
아래 코드를 보면 Flyable의 메타클래스로 ABCMeta를 장착
fly라는 추상 메서드를 선언한 것을 볼 수 있다.
그리고 Airplane클래스는 Flyable클래스를 상속받았고 fly함수를 호출했다. 에러가 발생했다. 왜일까? 그 이유는 부모의 추상 메서드인 fly함수를 구현하지 않았기 때문이다.
class Flyable(metaclass=ABCMeta):
@abstractmethod
def fly(self): ...
class Airplane(Flyable):
...
airplane = Airplane()
airplane.fly() # TypeError: Can't instantiate abstract class Airplane with abstract method fly
아래 코드와 같이 fly함수를 구현해주면 정상적으로 코드가 동작하는 것을 알 수 있다.
class Flyable(metaclass=ABCMeta):
@abstractmethod
def fly(self): ...
class Airplane(Flyable):
def fly(self):
print('fly~~')
airplane = Airplane()
airplane.fly() *# "fly~~"*