1 回答

TA贡献1770条经验 获得超3个赞
你可以使用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))
我个人更喜欢闭包工厂方法,因为它们更明确地说明你在做什么。局部对象总是对我有些特别,但这可能就是我。
(请注意,我冒昧地修复了您验证器中的逻辑错误——您可能也想应用它。:))
添加回答
举报