有一个比较绕的地方,但是我相信我能理解透彻这个里面的逻辑还有原理
def check(func):print('登录验证')def inner():func()return innerdef fss():print('发说说')fss = check(fss)
fss()
这里的fss = check(fss)还有后面的fss()什么意思?怎么理解呢??
首先,fss=check(fss)什么意思呢?就是说,把fss放到了check这个函数里面去了,相当于替换了参数func,然后把check这个函数的返回值赋值给fss。fss虽然是个函数,但是同样他也是一个变量,变量变成了返回inner
但是最后一行又调用了fss(),这个是什么意思呢?
就是说,相当于只执行check这个函数,然后先执行‘登录验证,然后再执行一下fss’
当转化成为装饰器函数的时候只需要改一点点就行了
def check(func):print('登录验证')def inner():func()return inner
@check
def fss():print('发说说')
# fss = check(fss)
fss()
2一个简单的例子,我却学了好久,。,,
class Caculator:def checknumber_zsq(func):def inner(self,n):if not isinstance(n,int):raise TypeError('当前这个数据的类型有问题,应该是一个征信数据')return func(self,n)return inner@checknumber_zsqdef __init__(self,num):self.__result = num@checknumber_zsqdef jia(self,n):self.__result += n@checknumber_zsqdef jian(self,n):self.__result -=n@checknumber_zsqdef cheng(self,n):self.__result *=n@checknumber_zsqdef chu(self,n):self.__result /=ndef show(self):print('计算的结果是:%d'% self.__result)
c1 = Caculator(2)
c1.jia(6)
c1.show()