教程里提到的链式调用
Posted 009notfound
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程里提到的链式调用相关的知识,希望对你有一定的参考价值。
举个例子:
现在很多网站都搞REST API,比如新浪微博、豆瓣啥的,调用API的URL类似:
如果要写SDK,给每个URL对应的API都写一个方法,那得累死,而且,API一旦改动,SDK也要改。
利用完全动态的__getattr__
,我们可以写出一个链式调用:
class Chain(object):
def __init__(self, path=‘‘):
self._path = path
def __getattr__(self, path):
return Chain(‘%s/%s‘ % (self._path, path))
def __str__(self):
return self._path
__repr__ = __str__
试试:
>>> Chain().status.user.timeline.list #这句是链式调用
‘/status/user/timeline/list‘
Chain().status.user.timeline.list #这句是链式调用是这样展开的
↓ Chain(path= ‘‘).__getattr__(self, path=‘status‘)
return Chain(‘%s/%s‘ % (self._path=‘‘, path= ‘status‘))=Chain(‘/status‘)
↓
Chain(‘/status‘).user.timeline.list
↓Chain(path= ‘/status‘).__getattr__(self, path=‘usr‘)
return Chain(‘%s/%s‘ % (self._path=‘/status‘, path= ‘usr‘))=Chain(‘/status/usr‘)
以上是关于教程里提到的链式调用的主要内容,如果未能解决你的问题,请参考以下文章
PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function