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