Я хотел бы объявить иерархию пользовательских исключений в Python. Тем не менее, я бы хотел, чтобы мой пользовательский класс верхнего уровня (TransactionException
) был абстрактным. То есть, я намереваюсь TransactionException
указать методы, которые должны определять его подклассы. Однако TransactionException
никогда не должен быть создан или создан.Можно ли объявить абстрактное исключение в Python?
У меня есть следующий код:
from abc import ABCMeta, abstractmethod
class TransactionException(Exception):
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
Однако приведенный выше код позволяет мне экземпляр TransactionException
...
a = TransactionException()
В этом случае a
не имеет смысла, и вместо этого следует сделать исключение , Следующий код удаляет тот факт, что TransactionException
является подклассом Exception
...
from abc import ABCMeta, abstractmethod
class TransactionException():
__metaclass__ = ABCMeta
@abstractmethod
def displayErrorMessage(self):
pass
Этого код правильно запрещающим экземпляр, но теперь я не могу поднять подкласс TransactionException
, потому что это не Exception
больше.
Можно ли определить абстрактное исключение в Python? Если да, то как? Если нет, почему бы и нет?
ПРИМЕЧАНИЕ: Я использую Python 2.7, но с радостью соглашусь ответить на Python 2.x или Python 3.x.
Строго говоря, вы все еще можете создать экземпляр 'TransactionException', вы просто не можете его инициализировать (' exc = TransactionException .__ new __ (TransactionException) '). Но это, вероятно, в духе того, чего хочет OP. – chepner