我正在尝试在 Web 应用程序中使用 PyContracts,所以我有很多自定义的类被传递,我只是想与其他更传统的参数类型一起进行类型检查。为了清洁和强制文档,我想使用合同编程(PyContracts)来实现这一点。
当我按名称引用本地可见类时,PyContracts 似乎不知道该类型。例如:
from contracts import contract
class SomeClass:
pass
@contract
def f(a):
"""
:param a: Just a parameter
:type a: SomeClass
"""
print(a)
my_a = SomeClass()
f(my_a)
引发以下错误:
ContractSyntaxError: Unknown identifier 'SomeClass'. Did you mean 'np_complex64'? (at char 0), (line:1, col:1)
我知道我可以使用 new_contract 来自定义名称并将它们绑定到类,但是对于每种类型来说这都是很多麻烦。如果可能的话,我想使用 PyContracts 的 docstring 语法,而且我肯定需要使用字符串定义的合同格式,因为我使用的是布尔类型逻辑 ( "None|str|SomeClass"
)。如何使用本地类型和对代码库其余部分的最小入侵来实现这一点?