运行 属性验证器仅在 __attrs_post_init__ 结束后
Run attribute validator only after __attrs_post_init__ ends
我有:
@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。
当我们实施 __attrs_post_init__
时,是否在 __init__
之前或之后 运行 验证器进行了一些讨论。
我们决定 before,因为它们的主要存在理由是保护 class 免于错误的实例化并给予 you 对你的属性的信心。
也就是说,您始终可以 运行 手动使用 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 使验证更灵活,但还没有具体结果。
我有:
@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。
当我们实施 __attrs_post_init__
时,是否在 __init__
之前或之后 运行 验证器进行了一些讨论。
我们决定 before,因为它们的主要存在理由是保护 class 免于错误的实例化并给予 you 对你的属性的信心。
也就是说,您始终可以 运行 手动使用 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 使验证更灵活,但还没有具体结果。