python 装饰器 self 传递
时间: 2023-07-06 08:34:14 浏览: 59
Python 装饰器可以用来修改或增强函数的功能,而且可以使用 `@decorator` 语法使得代码更加简洁。
在使用装饰器时,如果要将实例对象作为参数传递给装饰器,可以使用 `self` 参数。下面是一个简单的示例:
```python
def my_decorator(func):
def wrapper(self, *args, **kwargs):
print("Before the function is called.")
func(self, *args, **kwargs)
print("After the function is called.")
return wrapper
class MyClass:
@my_decorator
def my_method(self, x):
print("MyClass.my_method(%s)" % x)
c = MyClass()
c.my_method(123)
```
在上面的示例中,`my_decorator` 是一个装饰器函数,它将 `wrapper` 函数作为返回值。`wrapper` 函数接收一个 `self` 参数,代表实例对象本身,同时也接收任意数量的位置参数 `args` 和关键字参数 `kwargs`。在 `wrapper` 函数中,我们可以在调用原函数之前和之后进行一些额外的操作,这里我们打印了一些调试信息。
在定义 `MyClass` 类时,我们使用了 `@my_decorator` 语法将 `my_decorator` 装饰器应用到 `my_method` 方法上。当我们调用 `c.my_method(123)` 时,实际上是调用了 `wrapper(self=c, x=123)`,而 `wrapper` 函数又调用了原函数 `my_method`,这样就实现了装饰器的功能。