Как переопределить метод get словаря python, используя UserDict? - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я использую 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", [])

Здесь я хотел бы, чтобы дети были пустым массивом, но я не могу получить доступ к значению по умолчанию (пустому массиву) в get_item метод, чтобы дети равнялись None ...

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 28 марта 2020

Вы изменили, как работает [ ... ].

Чтобы переопределить .get( ... ), просто def get.

nit: лучше всего избегать присвоения таким идентификаторам, как dict, dir, list или map, с тех пор у вас будут проблемы с доступом к некоторым встроенным функциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...