Итак, я пишу класс, который расширяет словарь, который сейчас использует метод "dictify", чтобы превратить себя в dict.Вместо этого я хотел бы изменить его так, чтобы вызов dict () для объекта приводил к тому же поведению, но я не знаю, какой метод переопределить.Это невозможно, или я упускаю что-то совершенно очевидное?(И да, я знаю, что приведенный ниже код не работает, но я надеюсь, что он иллюстрирует то, что я пытаюсь сделать.)
from collections import defaultdict
class RecursiveDict(defaultdict):
'''
A recursive default dict.
>>> a = RecursiveDict()
>>> a[1][2][3] = 4
>>> a.dictify()
{1: {2: {3: 4}}}
'''
def __init__(self):
super(RecursiveDict, self).__init__(RecursiveDict)
def dictify(self):
'''Get a standard dictionary of the items in the tree.'''
return dict([(k, (v.dictify() if isinstance(v, dict) else v))
for (k, v) in self.items()])
def __dict__(self):
'''Get a standard dictionary of the items in the tree.'''
print [(k, v) for (k, v) in self.items()]
return dict([(k, (dict(v) if isinstance(v, dict) else v))
for (k, v) in self.items()])
РЕДАКТИРОВАТЬ: чтобы показать проблему более четко:
>>> b = RecursiveDict()
>>> b[1][2][3] = 4
>>> b
defaultdict(<class '__main__.RecursiveDict'>, {1: defaultdict(<class '__main__.RecursiveDict'>, {2: defaultdict(<class '__main__.RecursiveDict'>, {3: 4})})})
>>> dict(b)
{1: defaultdict(<class '__main__.RecursiveDict'>, {2: defaultdict(<class '__main__.RecursiveDict'>, {3: 4})})}
>>> b.dictify()
{1: {2: {3: 4}}}
Я хочу, чтобы dict (b) был таким же, как b.dictify ()