Запускать валидатор атрибута только после окончания __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 после создания экземпляра.
1 ответ
Решение
Была небольшая дискуссия, когда мы реализовали __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)
Мы планируем сделать проверку - и когда она будет проведена - более гибкой, но ничего конкретного из этого не получилось.