加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 拦截dict __getitem__方法调用,当它传递给另一个字典

发布时间:2020-12-20 13:30:19 所属栏目:Python 来源:网络整理
导读:如您所知,python允许我们简单地覆盖dict .__ getitem__方法,这样当有人试图从中检索任何值时,我们可以在那里做一些不同的事情. 当一个MyDict(dict)类实例被传递给另一个python dict实例的update方法时,我想做一些代码.见下文: class MyDict(dict): def __ge
如您所知,python允许我们简单地覆盖dict .__ getitem__方法,这样当有人试图从中检索任何值时,我们可以在那里做一些不同的事情.

当一个MyDict(dict)类实例被传递给另一个python dict实例的update方法时,我想做一些代码.见下文:

class MyDict(dict):
    def __getitem__(self,item):
        print "Doing some stuff here"
        return dict.__getitem__(self,item)

d1 = MyDict({'1': 1,'2': 2})
d2 = {}
# I want to have d1.__getitem__ called,but it does not work :-(
d2.update(d1)

解决方法

尝试使用 collections.Mapping abstract base class(或 collections.MutableMapping,如果这是读写).

import collections

class MyDict(collections.Mapping):
    def __init__(self,*args,**kwargs):
        self.data = dict(*args,**kwargs)

    def __len__(self):
        return len(self.data)

    def __iter__(self):
        return iter(self.data)

    def __contains__(self,key):
        return key in self.data

    def __getitem__(self,key):
        print 'Doing some stuff here'
        return self.data[key]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读