Python类中装饰器

网上的装饰器教程都是关于如何使用函数修饰普通函数的,本文章介绍如何使用类中的函数修饰类中函数。

直接看代码:

class a:
    def __init__ (self):
        self.a = 0
    
    def decorate (func):
        def warpper (self,*args,**kwargs):
            print (self)
            print ('decorate')
            r = func (self,*args,**kwargs)
            self.__init__ ()
            print ('decorate end')

            return r
        
        return warpper

    @decorate
    def plus (self,num):
        self.a += num
        print (self.a)

与普通类中函数不同的是,装饰器函数的第一个参数不是self,而是被修饰的function

class a:
    def __init__ (self):
        self.a = 0
    def decorate (func):
        print (func)
    @decorate
    def test (self):
        pass

--> <function test at 0xxxxxxxxxxx>

那么我们如何获取self呢?我们将其填写在warpper中

class a:
    def __init__ (self):
        self.a = 0
    
    def decorate (func):
        def warpper (self,*args,**kwargs):
            do_something....
        return warpper

    @decorate
    def plus (self,num):
        self.a += num
        print (self.a)

留下评论