gpt4 book ai didi

python - 在python中使用类变量调用装饰器

转载 作者:行者123 更新时间:2023-11-28 16:37:12 27 4
gpt4 key购买 nike

可能我以错误的方式解决了这个问题,并且有一个更简单的解决方案,但这是我的问题。

我有一个这样定义的装饰器:

def my_decorator(argument):
def wrap(f):
def wrapped_f(*args, **kwargs):
.... # does something with argument
return wrapped_f
return wrap

然后我定义了一个如下所示的类:

class MyClass(object):
def __init__(argument):
self.argument = argument

@my_decorator(self.argument) # !this is an error!
def my_method(self):
.... # does something

显然我写的是错误的,因为在装饰器级别我无法访问 self,但是解决这个问题的正确方法是什么?

最佳答案

您可以让装饰器访问 wrapped_f 中的 self.argument:

def mydecorator(f):
def wrapped_f(self, *args, **kwargs):
argument = self.argument
.... # does something with argument
return f(self, *args, **kwargs)
return wrapped_f
return wrap

如果作为argument 传递的变量根据被装饰的函数而改变,您可以将它作为字符串传递给装饰器并使用getattr self :

def my_decorator(arg_name):
def wrap(f):
def wrapped_f(self, *args, **kwargs):
argument = getattr(self, arg_name)
.... # does something with argument
return wrapped_f
return wrap

class MyClass(object):
def __init__(self, argument):
self.argument = argument

@my_decorator("argument")
def my_method(self):
.... does something

关于python - 在python中使用类变量调用装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24394449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com