我尝试在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)
引发以下错误:
^{pr2}$我知道我可以使用new_contract来自定义名称并将它们绑定到类,但对于每种类型,这都是一个很大的麻烦。如果可能的话,我想对PyContracts使用docstring语法,而且我肯定需要使用字符串定义的契约格式,因为我使用的是布尔类型逻辑("None|str|SomeClass"
)。如何使用本地类型和对代码库其余部分的最小入侵来实现这一点?在
我设计了一个魔术装饰器,在创建合同之前添加了类型。对于任何感兴趣的人来说,这似乎是可行的,但如果定义大量函数,则可能会相当慢:
一些测试运行:
^{pr2}$相关问题 更多 >
编程相关推荐