前言
最近有许多朋友私信问我,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__,那么我们各组件之间可能要约定或规范一个接口,比如下面,大家都叫notcall()。。。
class route(object):
def __

本文探讨了Python中可调用对象的用途,解释了使用__call__方法而非直接绑定类方法的原因。通过实例展示了__call__如何简化代码、实现功能扩展,如静态变量模拟,并在元类中进行对象绑定操作。鼓励读者分享更多利用__call__的设计模式。
最低0.47元/天 解锁文章
1457

被折叠的 条评论
为什么被折叠?



