クラスを定義するときに、入力変数のタイプチェック(assert
を使用)を含めるのが好きです。私は今、次のような抽象基底クラス(ABC)BaseRule
から継承する「専門的な」クラスRule
を定義しています: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
に組み込みたいと思います。私はどうすればこれについて行くことができますか?
とABC型注釈に、このドキュメントを参照してください。また、包括的なソリューションのために[MyPy](http://mypy-lang.org/)を見てみましょう。 – 9000