파이썬에서 사용자 정의 예외의 계층 구조를 선언하고 싶습니다. 그러나 최상위 사용자 정의 클래스 (TransactionException
)를 추상화하고 싶습니다. 즉, TransactionException
은 서브 클래스가 정의해야하는 메소드를 지정하려고합니다. 그러나 TransactionException
을 인스턴스화하거나 제기해서는 안됩니다.파이썬에서 추상 예외를 선언 할 수 있습니까?
나는 다음과 같은 코드가 있습니다
from abc import ABCMeta, abstractmethod
class TransactionException(Exception):
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
그러나, 위의 코드 나 TransactionException
를 인스턴스화 할 수 있습니다 ... a
의미가이 경우
a = TransactionException()
을 대신 예외를 그린다 . 다음 코드는 TransactionException
는 Exception
의 서브 클래스라는 사실 ...
from abc import ABCMeta, abstractmethod
class TransactionException():
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
이 코드가 제대로 인스턴스를 금지하고 있지만 어떤 이상 Exception
아니기 때문에 지금은 TransactionException
의 서브 클래스를 발생시킬 수 없습니다를 제거합니다.
파이썬에서 추상 예외를 정의 할 수 있습니까? 그렇다면 어떻게? 그렇지 않다면 왜 안 되겠습니까?
참고 : 저는 Python 2.7을 사용하고 있지만, Python 2.x 또는 Python 3.x에 대한 답변을 기꺼이 수락 할 것입니다.
엄밀히 말하면 여전히'TransactionException'을 인스턴스화 할 수 있습니다. 단지 초기화 할 수 없습니다 ('exc = TransactionException .__ new __ (TransactionException)'). 그러나 이것은 OP가 원하는 것의 정신에있을 것입니다. – chepner