python 装饰器 self 传递
时间: 2023-07-06 13:34:08 浏览: 164
在 Python 中,定义装饰器时可以使用 `@decorator` 语法糖来装饰一个函数或方法。如果要在装饰器中访问实例变量,可以在装饰器函数中传入 `self` 参数来获取实例对象。例如:
```python
class MyClass:
def __init__(self):
self.x = 0
def my_decorator(self, func):
def wrapper(*args, **kwargs):
self.x += 1
print(f'Method called {self.x} times')
return func(*args, **kwargs)
return wrapper
@my_decorator
def my_method(self):
print('Hello, world!')
```
在上面的代码中,`my_decorator` 是一个装饰器函数,它接收一个函数作为参数,并返回一个新的函数 `wrapper`。在 `wrapper` 中,我们可以通过 `self` 参数访问实例变量 `x`,并在每次调用被装饰的方法时增加它的值。
最后,我们将 `my_decorator` 应用到 `my_method` 上面,使用 `@my_decorator` 语法糖来装饰它。这样,每次调用 `my_method` 时,都会先执行 `my_decorator` 装饰器函数中的逻辑。