【发布时间】:2021-05-01 02:07:52
【问题描述】:
我在 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 继承自的 prettyprint 类,也可以用于返回搜索:
class superDict(dict, prettyprint):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
...
def search(self, pattern):
return prettyprint(jmespath.search(pattern, self))
class prettyprint: ???
但我无法弄清楚漂亮打印类会是什么样子才能正常工作。我基本上想不出一种优雅的方式来做到这一点。也许 init 中围绕 arg 类型的一些逻辑会更简单?
【问题讨论】:
-
当
jmespath.search返回一个列表时,你想做什么? -
无论 jmespath 返回什么,prettyprint 都应该只是 json.dump。但是我的包装器需要一个字典,所以 superDict([list]) 会出错。
-
您没有使用漂亮的打印模块
pprint有什么原因吗?漂亮的打印不一定是课程的一部分,如果你确实需要漂亮的打印,那么只需使用pprint.pprint(some_variable) -
Pprint 并不是真正的问题。我对级联方法的优雅方式更感兴趣。
标签: python dictionary methods super self