举个例子:
现在很多网站都搞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-10-10 23:26:27