1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python 元编程

Posted on 2012-12-11 10:24  1957  阅读(823)  评论(0编辑  收藏  举报

利用 __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 )