the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


python中的__call__,把类实例当函数使

作者:the5fire | 标签:   | 发布:2012-07-17 10:32 p.m. | 阅读量: 7590, 7320
看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内部的代码发生变化,外部的调用代码不需要改变。
还有其他用处吗? - from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈

【上一篇】 python中的观察者模式
【下一篇】 明天开始sohu之旅

其他分类: