你可以用
functools.partial
:
def range_validator(instance, attribute, value, min_value, max_value):
lv = len(value)
if min_value > lv or lv > max_value:
raise ValueError("Must be between {} and {}".format(min_value, max_value))
@attrs
class C:
x = attrib(validator=partial(range_validator, min_value=10, max_value=30))
或者可以使用闭包:
def make_range_validator(min_value, max_value):
def range_validator(instance, attribute, value):
lv = len(value)
if min_value > lv or lv > max_value:
raise ValueError("Must be between {} and {}".format(min_value, max_value))
return range_validator
@attrs
class C:
x = attrib(validator=make_range_validator(10, 30))
(请注意,我冒昧地在验证器中修复了一个逻辑错误,您可能也想应用它。:))