装饰器内获取被装饰函数类名
时间: 2023-11-21 17:05:05 浏览: 38
在装饰器内获取被装饰函数的类名,可以通过访问函数的`__class__`属性来实现。例如:
```python
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Class name:", func.__class__.__name__)
return func(*args, **kwargs)
return wrapper
class MyClass:
@my_decorator
def my_method(self):
pass
obj = MyClass()
obj.my_method()
```
输出结果为:
```
Class name: function
```
这是因为`my_method`方法实际上是一个函数对象,所以其`__class__`属性为`function`。如果你想要访问`MyClass`类的名称,可以通过访问`self.__class__.__name__`来实现。例如:
```python
def my_decorator(func):
def wrapper(self, *args, **kwargs):
print("Class name:", self.__class__.__name__)
return func(self, *args, **kwargs)
return wrapper
class MyClass:
@my_decorator
def my_method(self):
pass
obj = MyClass()
obj.my_method()
```
输出结果为:
```
Class name: MyClass
```