'''
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]

最新文章

  1. VS2010调试速度很慢
  2. counting sort 计数排序
  3. c#3位一分(money)
  4. Unity3D4.x之AssetBundle学习笔记
  5. MySQL入门笔记
  6. hadoop2.2.0 MapReduce的序列化
  7. 三级联动数据表db_nove.sql
  8. TextView textSize 文字大小
  9. js或jquery实现图片轮播
  10. POJ2411 Mondriaan&#39;s Dream(状态压缩)
  11. hihoCoder_二分&amp;#183;归并排序之逆序对
  12. go语言时间比较
  13. string_array.go
  14. JAVA进阶21
  15. rtp传输音视频(纯c代码)
  16. 《Java编程思想》读书笔记-类与对象
  17. hml页面转化成图片
  18. Scala视图界定
  19. Java开发环境配置(4)--Maven安装 环境变量配置,本地仓库配置---插件安装
  20. 004 Spark中的local模式的配置以及测试

热门文章

  1. Mac008--快捷键
  2. JavaScript Is or isNot
  3. [Linux] 020 RPM 包的命名原则与其依赖性
  4. mysql练习题目试水50题,附建库sql代码
  5. MySQL格式化时间戳 统计当日,第二天,第三天,3个工作日以后的数据
  6. java 关于泛型的一些知识点
  7. BFS+打印路径
  8. elasticsearch 深入 —— 结构化搜索
  9. rpmcache - 缓存 RPM 打包头部
  10. vue,一路走来(12)--父与子之间传参