前言
最近有许多朋友私信问我,Python的可调用对象到底有什么用处,为什么要费事的重载括号而不是直接绑定类的普通方法。下面就来为大家分享__call__可调用对象的一些感悟。
精简代码,方便接口调用的“约定俗成”
class route(object):
def __init__(self, res)
self.resource = res
@classmethod
def factory(cls):
print 'factory'
return cls()
@webob.dec.wsgify
def __call__(self,req):
print 'route __call__'
return self.resource()
class resource(object):
@webob.dec.wsgify
def __call__(self,req):
print 'resource __call__'
class API(route):
def __init__(self):
res = resource()
super(API, self).__init__(res)
wsgi.server(eventlet.listen(('', 80)), API.factory())
上面的代码是一个典型的WSGI服务的节选,如果不用__call__,那么我们各组件之间可能要约定或规范一个接口,比如下面ÿ