拦截python函数中的局部赋值

时间:2014-04-16 04:11:30

标签: python variable-assignment assignment-operator

我一直在玩Python中的拦截全局作业:

class MyDict(dict): 
    def __setitem__(self, k, v):
        print "intercepted assignment to ", k
        super(MyDict, self).__setitem__(self, k, v)

nsG = MyDict()
exec('a=10', nsG)

这会打印“截获的分配给”。凉!但是,这在函数内部不起作用:

def f():
    # global a
    a = 10

exec("f()", nsG)

在那里,a的分配没有被拦截(因为默认情况下,函数中的赋值是该函数的本地分配:af的本地分配,因此nsG是没有参与;如果我取消注释global a中的f语句,那么就像人们期望的那样拦截分配。

有没有办法拦截函数中的本地赋值?

0 个答案:

没有答案