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装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序
/* 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常 ...
随机推荐
- [功能集锦] 002 - mysql查询数据库字典+导出+样式一键整合至excel
写在前面: 因为工作时候经常遇到半路接手项目的情况,由于年代久远,数据库字典这块经常缺失.故写此篇,以便复用,也希望对大家有点帮助. 随笔内容不高级,如有不妥,不吝指正. 20190730-加了一些简 ...
- meta标签viewport的深入理解(转)
移动前端开发之viewport的深入理解 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的met ...
- [CF643E]Bear and Destroying Subtrees(期望,忽略误差)
Description: 给你一棵初始只有根为1的树 两种操作 1 x 表示加入一个新点以 x为父亲 2 x 表示以 x 为根的子树期望最深深度 每条边都有 \(\frac{1}{ ...
- C++中的布尔类型和引用
1,C++ 中的布尔类型: 1,C++ 在 C 语言的基础类型系统之上增加了 bool: 1,C 语言中,没有 bool 类型存在,往往都是用整型代替 bool 类型,常用 0 表示假,用 1 表示真 ...
- [暑假集训Day4T3]曲线
三分模板. 三分法求单峰函数最优值,之后每次取所有二次函数最优值即可 #pragma GCC optimize(3,"Ofast","inline") #inc ...
- 2.maven 安装配置
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/24518577 System Requ ...
- k8s ingress路由强制跳转至https设置
为ingress配置增加注解(annotations):nginx.ingress.kubernetes.io/ssl-redirect: 'true' 就可以实现http强制跳转至https 不过默 ...
- 自定义的最简单的可回调的线程任务CallbackableFeatureTask(模仿google的ListenableFutureTask)
1.使该Task继承Callable,Runable import java.util.concurrent.Callable; import java.util.function.Consumer; ...
- 【LeetCode】一种博弈思路 minimax(共5题)
[292] Nim Game (2019年3月12日,E) 有一堆石头,游戏规则是每次可以从里面拿1-3颗石头,拿到最后的石头的人赢.你和你的对手都 optimal 的玩这个游戏,问先手(也就是你)能 ...
- ltp-ddt nand_perf_ubifs_w_cpuload
NAND_M_PERF_UBIFS_CPU_LOAD source 'common.sh';/opt/ltp/runltp -f ddt/nand_perf_ubifs -s "NAND_S ...