自定义词典通过**

2024-09-30 20:39:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用**kw的库函数,但是我想传递一个类似字典的类,这样我就可以重写__getitem__来跟踪它对字典中数据的访问。例如,在下面的代码中,调用libfn不打印access,而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)

Tags: selfreturn字典fooinitisdefitem
2条回答

做这个

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

这或多或少管用

^{pr2}$

如果不改变Python本身,就不能这样做。它在较低级别转换为dict。在

相关问题 更多 >