Python 2:在运行时评估参数的包装器

时间:2017-05-12 15:48:03

标签: python-2.7

我真的很茫然。我需要将参数传递给包装器;这些参数随运行时而变化。知道如何使用包装器来解决这个问题吗?



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)




1 个答案:

答案 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

关键是字符串是不可变的,而列表是可变的。当你传入一个字符串时,它基本上被复制了。传入列表时,您可以将对原始列表的引用传递给它,这本身就是可变的。