2017-10-13 2 views
1

J'ai:Run attribut validateur seulement après __attrs_post_init__ se termine

@attr.s 
class Example: 
    number = attr.ib(validator=attr.validators.instance_of(int), init=False) 

    def __attrs_post_init__(self): 
     self.number = 'string' 
     print('It seems, validation was running before:(') 


t = Example() 

Comment correctement la validation de la configuration ici? Je veux valider self.number après l'instanciation.

+0

Qu'est-ce que 'attr'? – warvariuc

+0

Bonjour @warvariuc, ceci est un paquetage https://github.com/python-attrs/attrs –

Répondre

3

Il y avait un peu une discussion quand nous avons implémenté __attrs_post_init__ si exécuter des validateurs avant ou après __init__.

Nous avons décidé de avant, parce que leur principale raison d'être est de protéger la classe du mal instanciation et de donner vous la confiance sur ce qui est dans vos attributs.


Cela dit, vous pouvez toujours exécuter validateurs manuellement à l'aide attr.validate():

@attr.s 
class Example: 
    number = attr.ib(validator=attr.validators.instance_of(int), init=False) 

    def __attrs_post_init__(self): 
     self.number = 'string' 
     # ... 
     attr.validate(self) 

Nous faisonsplan à rendre la validation - et quand il est effectué - plus souple, mais rien de concret en sommes sortis encore .

+0

Merci de votre réponse –