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

python – 自定义词典通过** kw

发布时间:2020-12-20 11:16:50 所属栏目:Python 来源:网络整理
导读:我有一个使用** kw的库函数,但我想传递一个类似字典的类,以便我可以覆盖__getitem__来跟踪它对字典中数据的访问.例如,在下面的代码中调用libfn不会打印Accessed但libfn2会打印. class Dtracker(dict): def __init__(self): dict.__init__(self) def __getite
我有一个使用** kw的库函数,但我想传递一个类似字典的类,以便我可以覆盖__getitem__来跟踪它对字典中数据的访问.例如,在下面的代码中调用libfn不会打印Accessed但libfn2会打印.

class Dtracker(dict):
  def __init__(self):
    dict.__init__(self)
  def __getitem__(self,item):
    print "Accessed %s" % str(item)
    return dict.__getitem__(self,item)


def libfn(**kw):
  a = kw["foo"]
  print "a is %s" % a
  return a

def libfn2(kw):
  a = kw["foo"]
  print "a is %s" % a
  return a

d = Dtracker()
d["foo"] = "bar"  
libfn(**d)
libfn2(d)

解决方法

做这个

class Dtracker(dict):
    def __init__(self,*arg,**kw):
        super(Dtracker,self).__init__(*arg,**kw)
    def __getitem__(self,item):
        print "Accessed %s" % str(item)
        return dict.__getitem__(self,item)

def track( fn ):
    def tracked_fn( **kw ):
        kw= Dtracker( kw )
        fn( kw )
    return tracked_fn

@track
def libfn(kw):
    a = kw["foo"]
    print "a is %s" % a
    return a

这或多或少的作品

>>> libfn( **{'foo':'bar'} )
Accessed foo
a is bar

(编辑:李大同)

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

    推荐文章
      热点阅读