【问题标题】:Run attribute validator only after __attrs_post_init__ ends仅在 __attrs_post_init__ 结束后运行属性验证器
【发布时间】:2018-03-25 14:29:48
【问题描述】:

我有:

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

【问题讨论】:

标签: python python-attrs


【解决方案1】:

在我们实现 __attrs_post_init__ 时,有一些讨论是在 __init__ 之前还是之后运行验证器。

我们决定before,因为它们存在的主要理由是保护类免受错误实例化,并让对属性中的内容有信心。 p>


也就是说,您始终可以使用 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 让验证——以及何时执行——更加灵活,但还没有具体的结果。

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2021-03-12
    • 2014-02-03
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多