修改字典的.update函数

时间:2016-07-19 23:03:23

标签: python dictionary hook

我想知道如何从dict修改现有的.update函数。

例如:

import __builtin__

def test(a):
    print a

__builtin__.update = test

因此,当我再次使用X.update时,它会显示一个说明值的印刷品。

我的意思是:

test = {}
test.update({ "Key" : "Value" })

我想要一份显示以下文字的印刷品:“钥匙”和“价值”

亲切的问候, 丹尼斯

2 个答案:

答案 0 :(得分:1)

class dict2(dict):
    def update(*args,**kwargs):
        print "Update:",args,kwargs
        dict.update(*args,**kwargs)

d = dict2(a=5,b=6,c=7)
d.update({'x':10})

因为我确定你注意到你不能简单地做dict.update=some_other_fn ...但是,如果你既坚定又愚蠢,有办法做到这一点......

~> sudo pip install forbiddenfruit
~> python
...
>>> from forbiddenfruit import curse
>>> def new_update(*args,**kwargs): 
       print "doing something different..."
>>> curse(dict,"update",new_update)

答案 1 :(得分:0)

您可以通过继承dict来覆盖更新方法。

from collections import Mapping 

class MyDict(dict):
    def update(self, other=None, **kwargs):
        if isinstance(other, Mapping):
            for k, v in other.items():
                print(k, v)
            super().update(other, **kwargs)

m = MyDict({1:2})
m.update({2:3})