有一个比较绕的地方,但是我相信我能理解透彻这个里面的逻辑还有原理
- def check(func):
- print('登录验证')
- def inner():
- func()
- return inner
-
- def 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_zsq
- def __init__(self,num):
-
- self.__result = num
- @checknumber_zsq
- def jia(self,n):
-
- self.__result += n
- @checknumber_zsq
- def jian(self,n):
-
- self.__result -=n
- @checknumber_zsq
- def cheng(self,n):
-
- self.__result *=n
- @checknumber_zsq
- def chu(self,n):
-
- self.__result /=n
- def show(self):
- print('计算的结果是:%d'% self.__result)
- c1 = Caculator(2)
- c1.jia(6)
- c1.show()