В настоящее время я разрабатываю для python 2, и я пытаюсь использовать абстрактные базовые классы для имитации интерфейсов. У меня есть интерфейс, базовая реализация этого интерфейса и многие подклассы, которые расширяют базовую реализацию. Это выглядит следующим образом:Как неявно использовать базовое определение метода
class Interface(object):
__metaclass__ = ABCMeta
class IAudit(Interface):
@abstractproperty
def timestamp(self):
raise NotImplementedError()
@abstractproperty
def audit_type(self):
raise NotImplementedError()
class BaseAudit(IAudit):
def __init__(self, audit_type):
# init logic
pass
@property
def timestamp(self):
return self._timestamp
@property
def audit_type(self):
return self._audit_type
class ConcreteAudit(BaseAudit):
def __init__(self, audit_type):
# init logic
super(ConcreteAudit, self).__init__(audit_type)
pass
Однако PyCharm уведомляет меня, что ConcreteAudit
должен реализовать все абстрактные методы. Однако BaseAudit
(который не указан как abc) уже реализует эти методы, а ConcreteAudit
является подклассом BaseAudit
. Почему PyCharm предупреждает меня? Не следует ли обнаружить, что контракт IAudit
уже реализован через BaseAudit
?