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)
如果你的驗證器做了很多復雜的事情,一個簡單的函數可能會導致可讀性差的代碼。如果您使用類,您就可以封裝您的功能并將其分組在一起。
添加回答
舉報