我刚接触Python,还无法通过在线搜索找到该问题的答案。
这是一个不执行任何操作的示例装饰器(尚未)
def my_decorator(text):
def wrap(f):
# grab magic f.parent_class_object.my_var and append text
def wrap_f(*args, **kwargs):
f(*args, **kwargs)
return wrap_f
return wrap
这是一个示例类
class MyClass:
my_var = []
@my_decorator('sometext')
def my_func()
# do some super cool thing
在我的装饰器中,我想访问
MyClass
的类对象,并将“ sometext”添加到MyClass.my_var
列表中。我的目标是在模块加载时而不是函数调用时用修饰后的值填充my_var。有没有办法我可以从
f
导航到MyClass
来做到这一点?我知道* args [0]是MyClass的实例,但是仅在调用函数时可用。 最佳答案
无法从类装饰器中的函数读取它,因为在编译类时“方法”仍然是正常函数。另外,类名在编译时尚未定义。
您可以做的是将my_var
列表提供给装饰器。
class MyClass:
my_var = []
@my_decorator(my_var, 'sometext')
def my_func()
# do some super cool thing
到那时
my_var
仍然是普通变量。