25装饰器2

有一个比较绕的地方,但是我相信我能理解透彻这个里面的逻辑还有原理

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()

25装饰器2_第1张图片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()

你可能感兴趣的:(conch的代码学习,1024程序员节)