看django源码时,看到了这样的一个用法,不知道是什么意思,于是查了下,发现这么个用法,直接把实例化后的类当函数来使,果然是强悍的函数式编程。
看一个小demo
#coding=utf-8
class ImFunc(object):
def __call__(self,words):
print 'i say %s' % words
if __name__ == '__main__':
imfunc = ImFunc()
imfunc('what the func?') #把类当函数使
在Django中的template的loader.py中,就是使用了这个方法,部分代码:
class BaseLoader(object):
is_usable = False
def __init__(self, *args, **kwargs):
pass
def __call__(self, template_name, template_dirs=None):
return self.load_template(template_name, template_dirs)
def load_template(self, template_name, template_dirs=None):
source, display_name = self.load_template_source(template_name, template_dirs)
origin = make_origin(.......
看其作用应该就是省去了调用时写load_template这个方法了,另外一个作用就是如果BaseLoader内部的代码发生变化,外部的调用代码不需要改变。
还有其他用处吗?