我真的很茫然。我需要将参数传递给包装器;这些参数随运行时而变化。知道如何使用包装器来解决这个问题吗?
def wrapper(x=None):
def decorate(cls):
def fct(self):
print('wrapper argument is: %s' % x)
cls.fct = fct
return cls
return decorate
a = 'first'
@wrapper(x=a)
class Test():
pass
test = Test()
test.fct() # Prints: first
a = 'second'
test.fct() # Prints: first (instead of second)

答案 0 :(得分:0)
我无法将代码放入评论中,所以请按照以下方式进行操作。
def wrapper(x=None):
def decorate(cls):
def fct(self):
print('wrapper argument is: %s' % x[0])
cls.fct = fct
return cls
return decorate
a = ['first']
@wrapper(x=a)
class Test():
pass
test = Test()
test.fct() # Prints: first
a[0] = 'second'
test.fct() # Prints: second
关键是字符串是不可变的,而列表是可变的。当你传入一个字符串时,它基本上被复制了。传入列表时,您可以将对原始列表的引用传递给它,这本身就是可变的。