Python 只是不允许你这样做。您可以使用locals()
. 但是此时,您不妨将您感兴趣的变量传递给装饰器。
# using locals()
def decorator(class_namespace):
def _decorator(func):
class_namespace["decorated"].append(func)
return func
return _decorator
class A:
store = decorator(locals())
decorated = []
@store
def func(self):
pass
del store
一般来说,使用一对装饰器很容易。一个用来标记你感兴趣的功能,一个用来收集它们。
from types import FunctionType
def collect(cls):
for item in vars(cls).values():
print(item)
if isinstance(item, FunctionType) and getattr(item, "marked", False):
cls.marked_funcs.append(item)
return cls
def mark(func):
func.marked = True
return func
@collect
class B:
marked_funcs = []
@mark
def func(self):
pass
但是在您的情况下,在类的末尾创建一组函数名称可能会更简单。例如。
class C:
def func(self):
pass
func_names = [f.__name__ for f in [func]]