추상 클래스(abstract class)
2021. 4. 8. 01:16ㆍPython
728x90
pix2pix 코드리뷰 중 이러한 부분을 발견했고, abstract base class = ABC 라는 것에 대해 알아보겠습니다.
from abc import ABC, abstractmethod
class BaseDataset(data.Dataset, ABC):
...
...
추상 클래스를 만들기 위해 import로 abc 모듈을 가져오고, 다음과 같이 추상 클래스를 만들어 줍니다.
두 가지 방법이 있는데요,
from abc import ABC
class MyABC(ABC):
pass
-----------------
from abc import ABCMeta
class MyABC(metaclass=ABCMeta):
pass
다음과 같습니다.
파이썬 공식 문서에서, class abc.ABC는 ABCMeta를 메타 클레스로 가지는 도우미 클래스로, 간단히 추상클래스를 만들 수 있게 해준다고 합니다.
그렇지만 ABC의 형은 여전히 ABCMeta이므로, 다중 상속이 메타 클래스 충돌을 일으킬 수 있기 때문에 ABC 상속할 때는 메타 클래스 사용에 관한 일반적인 주의가 필요하기 때문에, ABCMeta를 직접 사용하여 abc를 정의할 수 있다고 합니다.
이렇게 abc를 만들면, 이 abc를 상속받는 class는 @abstractmethod가 붙은 추상 메서드를 모두 구현해야 합니다. 그렇지 않으면 에러가 발생합니다.
파생 클래스에서 반드시 구현해야 할 메서드를 정해 줄 때 사용
추상 클래스는 인스턴스로 만들 수가 없다
※ 이 때문에 @abstractmethod 가 붙은 추상메소드들은 (보통)이런식으로 빈 메소드로 만들어 줍니다.
@abstractmethod
def exmethod(self):
pass
728x90
'Python' 카테고리의 다른 글
__getitem__ (0) | 2021.05.21 |
---|---|
Python argparse (0) | 2021.05.09 |
2차원 List 뒤집기 (0) | 2021.05.01 |
정규 표현식 (0) | 2021.04.29 |
[Python] pathlib (0) | 2021.03.24 |