1 回答
TA贡献1848条经验 获得超2个赞
何时使用基于类的验证器?
在您的示例中,基于函数的验证器就足够了。如果您需要 OOP、类和对象的优点,那么您应该切换到基于类的验证器。想象一下以下非常虚构的源代码:
class StartsWithValidator():
def __init__(self, starts_with):
self.starts_with = starts_with
def __call__(self, value):
if not str(value).startswith(self.starts_with):
raise ValidationError(
'Your string does not start with: {}!'.format(self.starts_with),
params={'value': value}
)
my_validator = StartsWithValidator('123')
test_string = '123OneTwoThree'
my_validator(test_string) # Will it pass the validator?
您可以在这里看到不同的品质:
通过基于类的验证器,您可以使用对象。对象共享相同的功能但具有不同的内部状态。您现在可以设置一个验证器,它检查字符串是否以“abc”、“123”开头,而无需编写新代码
starts_with_abc = StartsWithValidator('abc')
starts_with_123 = StartsWithValidator('123')
starts_with_whatever = StartsWithValidator('whatever')
您可以使用继承。想象一下,您想要在其他功能中重用starts-with-validation,您只需从“StartsWithValidator”类继承即可。
class StartsWithABCValidator(StartsWithValidator):
def __init__(self):
super().__init__('ABC')
def __call__(self, value):
super().__call__(value)
如果你的验证器做了很多复杂的事情,一个简单的函数可能会导致可读性差的代码。如果您使用类,您就可以封装您的功能并将其分组在一起。
添加回答
举报