• pytho装饰器参数那些事_inspect.getcallargs


    '''
    Created on Jul 26, 2019
    
    @author: tomcat
    '''
    
    import inspect
    def chack_admin(func):
        def wrapper(*args,**kwargs):
            '''
            inspect.getcallargs 返回一个字典,字典里保存了函数所有的参数
            inspect.getcallargs(func[, *args][, **kwds]):将args和kwds参数到绑定到为func的参数名;对bound方法,也绑定第一个参数(通常为self)到相应的实例;返回字典,对应参数名及其值;
            '''
            fuc_args=inspect.getcallargs(func,*args,**kwargs)
            print("arg{},keord{},fuc_args{}".format(args, kwargs,fuc_args))
            if fuc_args.get("username") =="admin":
                re=func(*args,**kwargs)
            else:
                raise Exception('没有资格添加或删除元素')
            return re
        return wrapper
    class MyClass(object):
        def __init__(self):
            self.item=[90.89]
        '''
         如果username!=admin,没有资格添加一个元素
        '''
        @chack_admin
        def push(self,username,item):
            self.item.append(item)
        '''
        如果username!=admin,没有资格删除一个元素
        '''
        @chack_admin   
        def pop(self,username):
            if self.item:
                return self.item.pop()
            else:
                raise Exception('item 中没有元素')
    if __name__ == '__main__':
        m=MyClass()
        m.push('admin',10)
        m.push(username="admin",item=902)
        m.pop(username='admin')
        print(m.item)
    

    arg(<__main__.MyClass object at 0x10c5b5240>, 'admin', 10),keord{},fuc_args{'self': <__main__.MyClass object at 0x10c5b5240>, 'username': 'admin', 'item': 10}

    arg(<__main__.MyClass object at 0x10c5b5240>,),keord{'username': 'admin', 'item': 902},fuc_args{'self': <__main__.MyClass object at 0x10c5b5240>, 'username': 'admin', 'item': 902}

    arg(<__main__.MyClass object at 0x10c5b5240>,),keord{'username': 'admin'},fuc_args{'self': <__main__.MyClass object at 0x10c5b5240>, 'username': 'admin'}

    [90.89, 10]

  • 相关阅读:
    CSS 的 outline 属性
    CSS3 的 boxsizing 属性
    CSS 颜色的使用
    动态添加tab(ext)
    showModalDialog()重新加载问题
    DBUtility.SQLServerHelper”的类型初始值设定项引发异常
    终于有了思路
    js判断上传的图片格式
    session丢失 frame
    动态添加tab(ext中的treePanel)
  • 原文地址:https://www.cnblogs.com/tallme/p/11247899.html
Copyright © 2020-2023  润新知