zoukankan      html  css  js  c++  java
  • Python 元编程

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

    by 1957
  • 相关阅读:
    kali一些基础工具
    Yii2引入css和js文件
    My97DatePicker日期插件
    Yii2助手函数
    yii2相关前台组件
    yii2之DetailView小部件
    关于SQL_MODE的那些事
    Yii2 RBAC
    ORM介绍
    ASCII码
  • 原文地址:https://www.cnblogs.com/x1957/p/2812452.html
Copyright © 2011-2022 走看看