如何解决使用级联方法扩展字典
我在 python 中扩展 dict 类:
import jmespath
import json
class superDict(dict):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
def prettyPrint(self):
print(self.pprettyPrint())
def pprettyPrint(self):
return json.dumps(self,indent=4,sort_keys=True,default=str)
def search(self,pattern):
return jmespath.search(pattern,self)
...
我希望能够做到:
regDict = {"key": "value"}
super = superDict(regDict)
super.search('patern').prettyPrint()
我在这里遇到的问题是 jmespath 可以返回一个列表,所以我不能这样做:
def search(self,pattern):
return superDict(jmespath.search(pattern,self))
下一个想法是创建一个漂亮的打印类, superDict 将从中继承并且也可以用于搜索的返回:
class superDict(dict,prettyprint):
def __init__(self,**kwargs)
...
def search(self,pattern):
return prettyprint(jmespath.search(pattern,self))
class prettyprint: ???
但我不知道这个prettyprint类会是什么样子才能工作。我基本上想不出一种优雅的方式来做到这一点。也许 init 中围绕 arg 类型的一些逻辑会更简单?
解决方法
我最终使用了新
class extensions:
def prettyPrint(self):
print(self.pprettyPrint())
return self
def pprettyPrint(self):
return json.dumps(self,indent=4,sort_keys=True,default=str)
def search(self,pattern):
return exJSON(jmespath.search(pattern,self))
class exList(list,extensions):
def prettyTable(self,headers):
x = PrettyTable()
x.field_names = headers
for row in self:
x.add_row(row.values())
x.align = "l"
print(x)
return self
class exDict(dict,extensions):
pass
class exStr(str,extensions):
pass
class exJSON:
def __new__(self,obj):
if type(obj) is dict:
return exDict(obj)
if type(obj) is list:
return exList(obj)
if type(obj) is str:
return exStr(obj)
else:
return obj
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。