仅在__attrs_post_init__结束后运行属性验证器

时间:2017-10-13 12:38:48

标签: python python-attrs

我有:

@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。

1 个答案:

答案 0 :(得分:4)

我们实施__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进行验证 - 当它执行时 - 更灵活但没有具体的结果。