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]
pytho装饰器参数那些事_inspect.getcallargs的更多相关文章
- python装饰器参数那些事_接受参数的装饰器
# -*- coding: utf-8 -*- #coding=utf-8 ''' @author: tomcat @license: (C) Copyright 2017-2019, Persona ...
- Python装饰器探究——装饰器参数
Table of Contents 1. 探究装饰器参数 1.1. 编写传参的装饰器 1.2. 理解传参的装饰器 1.3. 传参和不传参的兼容 2. 参考资料 探究装饰器参数 编写传参的装饰器 通常我 ...
- 一个关于python装饰器参数的问题
看到廖雪峰python教程上,python装饰器一章 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3 ...
- python 装饰器 第八步:使用类来作为装饰器参数
#第八步:使用类作为装饰器参数 #装饰器使用的操作类 class Wish: #祈求方法 def before(): print('饭前洗洗手') #还愿方法 def after(): print(' ...
- python_3 装饰器参数之谜
装饰器参数之谜 之前已经初步了解过装饰器了,知道了装饰器可以"偷梁换柱",在不改变函数的调用方式和函数内容的时候,而把函数的功能偷偷地修改. 那么问题来了,如果被修改的函数中有参数 ...
- 装饰器参数加log
#有多个函数,需要计算他们的执行时间,加logimport timedef logger(flag): def show_time(f): #foo对象 def inner(*x,**y): star ...
- Python带参数的装饰器
在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passi ...
- Python装饰器AOP 不定长参数 鸭子类型 重载(三)
1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被 ...
- typescript装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序
/* 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常 ...
随机推荐
- vue同意本站协议的制作
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- Macaca的Python的api整理
整理了下Macaca的API,做成思维脑图,方便阅览. WebDriver 安装 pip install wd git clone https://github.com/macacajs/wd.py. ...
- MySQL-第八篇MySQL内置函数
1.根据函数对多行数据的处理方式,可以分为: 1>单行函数:对每行输入值进行单独计算,每行得到一个计算结果返回给用户. 2>多行函数:聚集函数.分组函数,主要用于完成一些统计功能.对多行 ...
- [LOJ3123] CTSC2019重复
Description 给定一个⻓为 n 的字符串 s , 问有多少个⻓为 m 的字符串 t 满足: 将 t 无限重复后,可以从中截出一个⻓度为 n 且字典序比 s 小的串. m ≤ 2000 n ≤ ...
- JS原型链详解
最近面试被问到了就决定好好深入理解原型链 对象 要清楚原型链,首先要弄清楚对象: 普通对象 最普通的对象:有__proto__属性(指向其原型链),没有prototype属性. 原型对象(person ...
- Java并发编程:线程的创建
Java并发编程:线程的创建 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- spring 配置属性细节
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/qilixiang012/article/details/28233811 概要(红色为上一篇所讲,蓝 ...
- myeclipse 文件注释部分乱码问题
前几天安装了myeclipse,用了几天,写了一些Demo,并且都有注释,今天上午根据要求,重新配置了一下myeclipse,包括许多编码方式的改变,当时没在意,下午打开原来的Demo时,发现它们的注 ...
- C#设计模式:单例模式(Singleton)
一,单例模式:它的主要特点不是根据客户程序调用生成一个新的实例,而是控制某个类型的实例数量-唯一一个,就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该 ...
- 请列举出JS对象的几种创建方式?
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 var person={firstname:&q ...