https://gist.github.com/danfate/316f1735fb577eca1191
上面的是代码
输入‘Chain().status.user.timeline.list’的话,
输出是'/status/user/timeline/list'这个.
我不理解的是‘return Chain('%s/%s' % (self._path, path))’这个怎么会返回上面的结果的?新手自学的,很多地方都看的稀里糊涂。。
1
jyjmrlk 2015-07-17 20:56:12 +08:00 1
有点像递归啦。
object.__getattr__(self, name) Called when an attribute lookup has not found the attribute in the usual places (i.e. it is not an instance attribute nor is it found in the class tree for self). name is the attribute name. This method should return the (computed) attribute value or raise an AttributeError exception. 找不到 attr 就会调用 __getattr__ ,__getattr__ 继续返回 Chain 的实例,但是又没找到,于是在调用 __getattr__, 如此反复。 |
2
sldaniel OP @jyjmrlk 难道意思是说把'.status'、'.user'、'.timeline'、'.list'当成了四个实例依次调用,然后这四后实例都没有,所以每次都运行了一下'%s/%s'?
我一开始理解的是‘status.user.timeline.list’当成一个实例输入输出,所以__getattr__只会调用一次。 |
3
linnchord 2015-07-17 21:23:14 +08:00 1
相当于
Chain().__getattr__('status').__getattr__('user').__getattr__('timeline').__getattr__('list') |
5
sivacohan 2015-07-18 13:22:59 +08:00 via Android 1
这个玩法每次都会生成一个Chain的实例。
从逻辑上来讲效率应该很低吧。 实际使用中强烈建议不要这么玩。如果一定要这么玩,请务必最好缓存。 |
8
qqblog 2015-07-22 23:06:20 +08:00
怎么不找廖?
|