教程里提到的链式调用

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‘)
 
 


以上是关于教程里提到的链式调用的主要内容,如果未能解决你的问题,请参考以下文章

多参构造器与Builder模式及链式调用的实际运用

多参构造器与 Builder 模式及链式调用的运用

promise和链式调用

PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function

PHP链式操作通过call和callstatic魔术方法的实现,以及phpstorm通过注释去追踪function

Python函数