2017-10-13 49 views
1

我:運行屬性驗證__attrs_post_init__結束後才

@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() 

如何正確設置驗證嗎?我想在實例化後驗證self.number。

+0

什麼是attr? – warvariuc

+0

你好@warvariuc,這是一個包https://github.com/python-attrs/attrs –

回答

3

有一點討論的,當我們實現__attrs_post_init__是否運行之前或之後__init__驗證。

我們決定爲之前,因爲他們的主要存在的理由是保護類從錯誤的實例,給你什麼在你的屬性的信心。


這就是說,你總是可以運行驗證使用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) 

我們做使得驗證plan - 當它的執行 - 更靈活,但是沒有具體出來的這些事。

+0

謝謝你的回答 –