写一个py装饰器,装饰器能被另一个class调用
时间: 2024-05-06 13:20:32 浏览: 16
以下是一种实现方法,可以将装饰器定义为一个函数,然后将其作为参数传递给一个类的构造函数,在类中调用该装饰器。
```python
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before the function is called.")
result = func(*args, **kwargs)
print("After the function is called.")
return result
return wrapper
class MyClass:
def __init__(self, func):
self.decorator = my_decorator(func)
def my_method(self, x):
return self.decorator(x)
@MyClass
def my_function(x):
return x**2
print(my_function(2))
```
在这个例子中,`my_decorator` 是一个装饰器函数,它将在函数被调用前后打印一些信息。`MyClass` 是一个类,它的构造函数接收一个函数作为参数,并将该函数传递给 `my_decorator`,以创建一个新的带有装饰器的函数。`my_method` 是一个类方法,它调用带有装饰器的函数,并返回结果。
在函数定义之前,我们使用 `@MyClass` 语法将该函数传递给 `MyClass` 类,这将自动调用 `MyClass` 的构造函数,并创建一个新的带有装饰器的函数。
最后一行代码将调用 `my_function`,并打印出输出结果。由于 `my_function` 已被装饰,因此在调用该函数时,将输出一些信息。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)