Когда я определяю класс, мне нравится включать проверку типов (используя assert
) входных переменных. Я теперь определение «специализированный» класса Rule
который наследуется от абстрактного базового класса (ABC) BaseRule
, аналогичного следующий:Как включить проверку типов в абстрактном базовом классе в Python
import abc
class BaseRule(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def resources(self):
pass
class Rule(BaseRule):
def __init__(self, resources):
assert all(isinstance(resource, Resource) for resource in resources) # type checking
self._resources = resources
@property
def resources(self):
return self._resources
class Resource(object):
def __init__(self, domain):
self.domain = domain
if __name__ == "__main__":
resources = [Resource("facebook.com")]
rule = Rule(resources)
assert
заявления в __init__
функции Rule
класса гарантирует, что resources
входа представляет собой список (или другой итерабельный) объектов Resource
. Однако это также относится к другим классам, которые наследуют от BaseRule
, поэтому я хотел бы как-то включить это утверждение в abstractproperty
. Как я могу это сделать?
Также посмотри на [MyPy] (http://mypy-lang.org/) для комплексного решения. – 9000