【发布时间】:2017-01-30 16:15:15
【问题描述】:
当我定义一个类时,我喜欢包括输入变量的类型检查(使用assert)。我现在定义一个“专业”类Rule,它继承自抽象基类(ABC)BaseRule,类似于以下内容:
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)
Rule 类的__init__ 函数中的assert 语句确保resources 输入是Resource 对象的列表(或其他可迭代)。但是,从BaseRule 继承的其他类也是如此,所以我想以某种方式将此断言合并到abstractproperty 中。我该怎么办?
【问题讨论】:
-
还可以查看MyPy 以获得全面的解决方案。