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' #怎么得出的这个结果?
1,Chain() 实例化,执行init, path默认为空, str返回空
2,Chain().status ,实例调用属性不存在,执行getattr方法。获取Chain(‘/status’)覆盖Chain,str返回/status
3,Chain().status.user.执行getatter. 获取Chain(‘/status/user’), str返回/status/user’
.....最后str返回/status/user/timeline/list
---------------------------------------------------------------------------
Chain().users('michael').repos #这种调用方法的结果如何理解? 同理。只不过('michael')调用会找call()方法。结果,过程也是一样的 def __call__(self, path): return Chain('%s/%s' % (self._path, path)) def __getattr__(self, path): return Chain('%s/%s' % (self._path, path))
Sign in to make a reply
本人已被河蟹
1,Chain() 实例化,执行init, path默认为空, str返回空
2,Chain().status ,实例调用属性不存在,执行getattr方法。获取Chain(‘/status’)覆盖Chain,str返回/status
3,Chain().status.user.执行getatter. 获取Chain(‘/status/user’), str返回/status/user’
.....最后str返回/status/user/timeline/list
---------------------------------------------------------------------------