Class Demo:
def __init__(self,func):
self._func=func
#实例()自动执行下面这个方法
def __call__(self,*args,**kwargs)
print("执行call方法")
self._func()
print(f"执行{self._func.__name__}扩展功能")
@Demo
def test():
print("执行test函数")
test()
当被装饰的函数存在多个装饰器,执行规则:最先执行里面的,最后执行外面的,就近原则
def a(func)
def wrapper()
print('a')
return func
def b(func)
wrapper()
print('b')
return func
@a
@b
def test1()
print('执行test1')
test1()
----反射--------
一,什么是反射:把字符串映射到实例的变量和实例的方法,然后可以取进行执行调用和修改
二,反射四个重要的方法
1.getattr 获取对象属性,对象方法
2.hasattr 判断是否有对应的属性方法
3.delattr 删除指定的属性
4.setattr 为对象设置内容
class TestObj:
def __init__(self,name,age):
self.name=name
self.age=age
deg test(self):
print("执行test方法")
def a:
print("a方法")
if __name__=='__main__':
xiaoyu=TestObj('小于',18)
print(getattr,"name")
result=getattr(xiaoyu,"test")
result()
if hasattr(xiaoyu,"test"):
print(getattr(xiaoyu,"test")))
setattr(xiaoyu,"name","winnie")
setattr(xiaoyu,"test1",a)
getattt(xiaoyu,test1)()
xiaoyu.test1()
class test:
funlist=['login',register']
def login(self:)
print("登录")
def register(self):
print("注册")
def run(self,num):
getattr(self,self.funlist[num-1])()
if __name__=__'main__'
obj=test()
num=int(input("请输入数字:"))
obj.run(num)