类方法添加装饰器

类方法添加装饰器

不过尔尔 29 2023-12-03

介绍

给类方法添加装饰器,只需使用@符号将装饰器直接应用于类方法上。

分类

1,无参装饰器

 def decorator(method):
     def wrapper(*args, **kwargs):
         print("class_method被执行之前")
         res = method(*args, **kwargs)
         print(res)
         print("class_method被执行之后")
         return res
 ​
     return wrapper
 ​
 class MyClass(object):
     def __init__(self):
         ...
 ​
     @decorator
     def class_method(self, x, y):
         return x + y
 ​
 obj = MyClass()
 obj.class_method(2, 3)

输出:

 class_method被执行之前
 5
 class_method被执行之后

调用 class_method 时,装饰器将在class_method方法调用前后执行,可以看到它们的输出。

2,有参装饰器

 def decorator(num):
     def wrapper(method):
         def inner(*args, **kwargs):
             res = method(*args, **kwargs)
             for _ in range(num):
                 print(res)
             return res
         return inner
     return wrapper
 ​
 class MyClass(object):
     def __init__(self):
         ...
 ​
     @decorator(3)
     def class_method(self, x, y):
         return x + y
 ​
 obj = MyClass()
 obj.class_method(2, 3)

输出:

 5
 5
 5

通过 @decorator(3)带有变量的装饰器应用于 class_method 方法。calss_method 方法被调用三次,然后返回结果。