Я реализую класс, который наследуется от UserDict.Этот класс работает полностью, как ожидалось, но я хотел бы расширить его возможности.Я хотел бы, чтобы он прошел через все методы, которые были переопределены при работе со словарем.Примером может быть:
from collections import UserDict
class DummyClass(UserDict):
def __init__(self):
self.mine = {}
self.data = self.mine
def __getitem__(self, key):
print("Doing some stuff here")
return self.data[key]
def __setitem__(self, key, value):
print(f"Uses my __setitem__ {key} {value}")
self.data[key] = value
При выполнении:
dd = DummyClass()
dd["one"] = {"two": 2}
print(f"First dict: {dd}")
Вывод:
Uses my __setitem__ one {'two': 2}
First dict: {'one': {'two': 2}}
Однако
dd["one"].update({"two": 4})
print(f"New dict: {dd.keys()}")
будет использовать модифицированный getitem и использовать базовый метод update.
Doing some stuff here
New dict: {'one': {'two': 4}}
Я хотел бы, чтобы dd["one"]
был объектом, который можно было изменить, вызвав измененный setitem без необходимости делать dd.update({"one": {"two": 4}})
Мой вопрос - какой путь лучшепойти об этом?В приведенном выше примере я должен вернуть объект с getitem, изменить его и вернуть?Мне бы хотелось, чтобы он был как можно более универсальным.
Он тесно связан с вопросом:
Подклассы словаря Python для переопределения __setitem __
Но яИнтересно, есть ли новый подход к этому сейчас.
Любая помощь приветствуется