利用 __getattr__来的- -
这个似乎感觉和Ruby的mising_method差不多(当然我也不清楚mising_method
那就ok立刻。。
def __getattr__(self, name): pass
这个name就是调用时候木有的attr
class N: def __init__(self,base): self.base = base def __getattr__(self,name): def add(*arg): s = self.base for i in arg: s = s + i return s def mul(*arg): s = self.base for i in arg: s = s*i return s if name == 'add': return add else: return mul b = N(2) #print b.add1(1,2,3) print b.xyz(3,4) print b.add(1,2)
上面的name就是
b.xyz -> 'xyz'
b.add -> 'add'
当然attr只是针对调用的名字
如上面的b.xyz , b.add
和右面的参数没有关系。
so,我们代码里面返回的是一个函数,正好处理这些参数。
PS.补充一个知识
*arg **arg
是python的变长参数
*arg是一般的函数的参数 test(a,b)
**arg是一个字典,test(a=1,b=2 )