python-3.x - 如何使用 UserDict 覆盖 python 字典的 get 方法?
问题描述
我目前正在使用 UserDict 来覆盖一些字典方法。我要做的是重写字典的默认“get”方法,以便能够将路径传递给它,并避免一遍又一遍地调用 get 方法。
这是我的代码:
class MyDict(UserDict):
def __getitem__(self, path):
keys = path.split("/")
value = self.data
for key in keys:
if isinstance(value, list):
value = [ v.get(key) if v else None for v in value]
else:
value = value.get(key)
if not value:
break
if isinstance(value, dict):
return MyDict(value)
return value
一切正常,但是我希望能够访问默认值。我希望能够做这样的事情:
my_json = {
"name": "John"
}
dict = MyDict(my_json)
children = dict.get("children", [])
在这里,我希望 children 是一个空数组,但我无法访问get_item方法中的默认值(空数组),因此 children 等于 None ...
非常感谢您的帮助 !
解决方案
你改变了[
...的]
工作方式。
要覆盖.get( ... )
,很简单def get
。
nit: Prolly 最好避免分配给诸如dict
, dir
, list
, or之类的标识符map
,因为那样你将无法访问某些内置函数。
推荐阅读
- pentaho - 当我访问 pentaho 服务器时,Pentaho PDI 非常慢
- php - 如何在 nginx 中阻止 .php 文件请求
- phpunit - 如何在 PhpStorm 中使用 PHPUnit 代码覆盖工具 PCOV
- laravel - 如何在 laravel 中使用 echo 服务器验证私人频道
- python - 为什么我得到不同的 matmul 和求解结果?
- graphql-java - 在 Spring Boot 应用程序启动期间访问 graphql 模式
- javascript - 如何将表格数据和行动态添加到html表格中?
- javascript - Node.js multer 无法存储文件和字符串数据
- bash - 自动从github克隆到ubuntu
- scala - 如何从 StructType 数组中删除元素?