我有一个装饰器类参数为(self, address, func=False),如何在被装饰函数传递自身时传递给func
时间: 2024-12-16 09:23:07 浏览: 8
在Python中,你可以通过将被装饰的函数作为`func`参数传递的方式来实现这一需求。装饰器通常是一个接收其他函数并返回新函数的对象,所以你需要在装饰器内部捕获到这个函数,并在需要的时候将其作为额外的参数存储起来。
这里是一个简单的例子:
```python
def my_decorator(address, func=None):
def wrapper(func_to_decorate):
def inner(*args, **kwargs):
print(f"Address: {address}, Function called with args: {args}, kwargs: {kwargs}")
# 如果func参数存在,说明我们有额外的函数需要保存
if func is not None:
# 将func_to_decorate赋值给func,然后在这个上下文中使用它
result = func(func_to_decorate, *args, **kwargs)
else:
result = func_to_decorate(*args, **kwargs)
return result
return inner
return wrapper
# 使用装饰器,同时传递额外的函数func
@my_decorator("example.com", func=lambda x: f"The original function returned: {x()}")
def my_function():
return "Hello from the decorated function"
# 被装饰后的函数会接收到func参数传入的行为
print(my_function())
```
在这个示例中,`my_function`会在执行前先打印地址和额外的函数结果(如果有的话)。如果你想在装饰器内部直接使用被装饰的函数,可以像上面那样使用`lambda`表达式。
阅读全文