gpt4 book ai didi

python - 如何使用类实例变量作为 Python 中方法装饰器的参数?

转载 作者:太空狗 更新时间:2023-10-30 00:25:46 25 4
gpt4 key购买 nike

如何在 Python 中使用类实例变量作为方法装饰器的参数?以下是一个最小的示例,显示了我正在尝试做的事情。它显然失败了,因为装饰器函数无法访问对实例的引用,而且我不知道如何从装饰器访问引用。

def decorator1(arg1):
def wrapper(function):
print "decorator argument: %s" % arg1
return function
return wrapper

class Foo(object):
def __init__(self, arg1):
self.var1 = arg1

@decorator1(self.var1)
def method1(self):
print "method1"

foo = Foo("abc")
foo.method1()

最佳答案

这是行不通的;装饰器在类创建期间被调用,这在创建实例之前很久(如果曾经发生过)。因此,如果您的“装饰器”需要实例,则必须在实例化时进行“装饰”:

def get_decorator(arg1):
def my_decorator(function):
print "get_decorator argument: %s" % arg1
return function
return my_decorator

class Foo(object):
def __init__(self, arg1):
self.var1 = arg1
self.method1 = get_decorator(self.var1)(self.method1)

def method1(self):
print "method1"

foo = Foo("abc")
foo.method1()

请注意,我根据它们的含义更改了函数名称;实际的“装饰器”,即(可能)修改方法的函数,在您的情况下是 wrapper,而不是 decorator1

关于python - 如何使用类实例变量作为 Python 中方法装饰器的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231950/

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