當我定義一個類時,我喜歡包含輸入變量的類型檢查(使用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)
在Rule
類的__init__
功能assert
語句確保resources
輸入是一個列表(或其他可迭代的)Resource
對象。但是,對於繼承自BaseRule
的其他類,情況也是如此,因此我想以某種方式將此斷言合併到abstractproperty
中。我該怎麼辦?
也採取了全面的解決方案來看看[MyPy(http://mypy-lang.org/)。 – 9000