教程里提到的链式调用

举个例子:

现在很多网站都搞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‘)
 
 


原文地址:https://www.cnblogs.com/009NotFound/p/10480356.html

时间: 2024-08-01 07:25:46

教程里提到的链式调用的相关文章

jAVA EE里什么是链式调用

链式调用就是每次调用完了过后返回的是自己,比如Hibernate里面执行hql需要设置参数时,每次设置完参数可以继续使用点设置下一个参数http://blog.sina.com.cn/s/blog_4b0c3acd0100ul7t.htmlhttp://www.oschina.net/question/780719_128163http://blog.sina.com.cn/s/blog_4b0c3acd0100ul7t.html

jQuery的XX如何实现?——2.show与链式调用

往期回顾: jQuery的XX如何实现?——1.框架 -------------------------- 源码链接:内附实例代码 jQuery使用许久了,但是有一些API的实现实在想不通.于是抽空看了jQuery源码,现在把学习过程中发现的一些彩蛋介绍给大家(⊙0⊙). 下面将使用简化的代码来介绍,主要关注jQuery的实现思想~>_<~ 相较于上一篇,代码更新了:21~78 1 (function(window, undefined){ 2 3 function jQuery(sel){

玩一把JS的链式调用

链式调用我们平常用到很多,比如jQuery中的$(ele).show().find(child).hide(),再比如angularjs中的$http.get(url).success(fn_s).error(fn_e).但这都是已经包装好的链式调用,我们只能体会链式调用带来的方便,却不知道形成这样一条函数链的原理是什么. 随着链式调用的普及,实现的方案也越来越多.最常见的,是jQuery直接返回this的方式,underscore的可选式的方式,和lodash惰性求值的方式.我们分别来了解,并

Swift-可空链式调用(Optional Chaining)(十五)

前言 其实可空链式调用并没有它的名字那么陌生,简而言之就是对于可选类型Optional(使用问号 ? 后缀表示)和强制展开类型(使用感叹号 ! 后缀表示)的使用方法.在平常写代码的时候只是大概的清楚哪些值是可空的,哪些值是肯定存在的,但是并没有深究可空的调用有何优点,有何使用时需要注意的事项.至少前面写不少示例代码的时候,我也是大都按照自己的想法去定义的.这一小节就是对可空调用的详细描述,至于链式,就是多层调用,大概就是school.classroom.student.name这样的调用方法.

jQuery的链式调用原理,Promise的链式调用,this的问题

最近被问到这个问题,jq的链式调用原理,当时比较懵=.=,毕竟现在jq接触的机会变很少了. jq的链式调用 jq的链式调用其实就是比如我们在选择dom的时候, $('input[type="button"]') .eq(0).click(function() { alert('点击我!'); }).end().eq(1) .click(function() { $('input[type="button"]:eq(0)').trigger('click'); }).

可选链式调用

可选链式调用 可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是 nil,那么调用将返回 nil.多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为 nil,整个调用链都会失败,即返回 nil. 注意 Swift 的可选链式调用和 Objective-C 中向 nil 发送消息有些相像,但是 Swift 的可选链式调用可以应用于任意类型,并且能检查调用是否成功. 使用可选链式调用代替强制展开 通过在想

面向对象的链式调用

1. 对象的链式调用 function Chain(){ this.n=0;//属性不一定一开始的时候全部都要初始化 this.fn1=function(_obj){//this指向  new Chain()实例化的对象 alert(this.n++);//注意:alert(this.n++)与this.fn1中的this 不一定指向的对象是一样的 return this; } this.fn2=function(){//同上 alert(this.n++);//注意:alert(this.n+

进击的雨燕-------------可空链式调用

详情转自:http://wiki.jikexueyuan.com/project/swift/chapter2/07_Closures.html 可空链式调用(Optional Chaining)是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这种调用将返回空(nil).多个连续的调用可以被链接在一起形成一个调用链,如果其中任何一个节点为空(nil)将导致整个链调用失败.

在python中实现链式调用

用过jquery的一般都知道在jquery中可以链式调用,代码简洁优雅.比如$("a").addClass("test").show().html("foo");. 在redis-py中的pipeline中也可以链式调用,比如pipe.set('foo', 'bar').sadd('faz', 'baz').incr('auto_number').execute() . 那么究竟怎么实现的呢? 很简单,返回对象自己就行了,即return self