추상 클래스(abstract class)

2021. 4. 8. 01:16Python

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