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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |