J'essaie d'utiliser PyContracts dans une application Web. J'ai donc beaucoup de classes personnalisées que je veux simplement vérifier avec d'autres types d'arguments plus traditionnels. Je voudrais utiliser la programmation contractuelle (PyContracts) pour accomplir ceci, pour la propreté et la documentation forcée.Type local de référence dans pycontract
Lorsque je référence un nom de classe localement visible, PyContracts ne semble pas connaître le type. Par exemple:
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)
génère l'erreur suivante:
ContractSyntaxError: Unknown identifier 'SomeClass'. Did you mean 'np_complex64'? (at char 0), (line:1, col:1)
Je sais que je peux utiliser new_contract aux noms sur mesure de définir et de les lier à des classes, mais c'est beaucoup de tracas à faire pour chaque type . Je veux utiliser la syntaxe docstring pour PyContracts si possible, et je dois absolument utiliser le format de contrat défini par la chaîne puisque j'utilise la logique de type booléenne ("None|str|SomeClass"
). Comment puis-je accomplir cela avec des types locaux et une intrusion minimale dans le reste de mon code?