Python __call__特殊方法实例

问题:

我知道当一个类的实例被调用时,一个类中的__call__方法被触发。但是,我不知道什么时候可以使用这种特殊的方法,因为可以简单地创建一个新的方法,并在__call__方法中完成相同的操作,而不是调用该实例,可以调用该方法。
如果有人给我这个特殊方法的实际用法,我真的很感激。

回答:

Django表单模块很好地使用__call__方法来实现一致的API来进行表单验证。您可以为Django中的表单编写自己的验证器作为函数。

def custom_validator(value):
    #your validation logic

Django有一些默认的内置验证器,如电子邮件验证器,url验证器等,这些验证器大都属于RegEx验证器。为了实现这些,Django可以调用类(而不是函数)。它在RegexValidator中实现默认的正则表达式验证逻辑,然后将这些类扩展为其他验证。

class RegexValidator(object):
    def __call__(self, value):
        # validation logic

class URLValidator(RegexValidator):
    def __call__(self, value):
        super(URLValidator, self).__call__(value)
        #additional logic

class EmailValidator(RegexValidator):
    # some logic

现在您可以使用相同的语法调用自定义函数和内置的EmailValidator。

for v in [custom_validator, EmailValidator()]:
v(value) # <----- [/code] 正如你所看到的,Django中的这个实现类似于下面他们在答案中解释的内容。这可以用其他方式实现吗?你可以,但是,对于像Django这样的大框架来说,它不会像可视化或易于扩展。     Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python __call__ special method practical example

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 + 4 =