zoukankan      html  css  js  c++  java
  • 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]

  • 相关阅读:
    互联网经济和实体经济
    哈佛图书馆馆训
    程序的初步认知
    Part 89 to 91 Talking about pass the parameters in thread
    Part 100 Func delegate in c#
    Part 99 Lambda expression in c#
    Part 16 Important concepts related to functions in sql server
    Part 14 Mathematical functions in sql server
    Part 13 Cast and Convert functions in SQL Server
    Part 2 Creating, altering and dropping a database
  • 原文地址:https://www.cnblogs.com/tallme/p/11247899.html
Copyright © 2011-2022 走看看