pytho装饰器参数那些事_inspect.getcallargs
2024-10-07 15:56:41
'''
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]
最新文章
- VS2010调试速度很慢
- counting sort 计数排序
- c#3位一分(money)
- Unity3D4.x之AssetBundle学习笔记
- MySQL入门笔记
- hadoop2.2.0 MapReduce的序列化
- 三级联动数据表db_nove.sql
- TextView textSize 文字大小
- js或jquery实现图片轮播
- POJ2411 Mondriaan&#39;s Dream(状态压缩)
- hihoCoder_二分&;#183;归并排序之逆序对
- go语言时间比较
- string_array.go
- JAVA进阶21
- rtp传输音视频(纯c代码)
- 《Java编程思想》读书笔记-类与对象
- hml页面转化成图片
- Scala视图界定
- Java开发环境配置(4)--Maven安装 环境变量配置,本地仓库配置---插件安装
- 004 Spark中的local模式的配置以及测试