首页 > 解决方案 > 如何使用 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 ...

非常感谢您的帮助 !

标签: python-3.xdictionaryinheritance

解决方案


你改变了[...的]工作方式。

要覆盖.get( ... ),很简单def get

nit: Prolly 最好避免分配给诸如dict, dir, list, or之类的标识符map,因为那样你将无法访问某些内置函数。


推荐阅读