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