你有两个问题。第一个是一个小的语法问题:
extended_nested_dict.getRequired['person1']
# TypeError: 'method' object is not subscriptable
给,你正在努力
下标
一种方法。您可能想做的是调用get required(它使用括号,而不是方括号):
extended_nested_dict.getRequired('person1') # OK
另一个问题,我认为这是你真正面临的主要问题,那就是你只包装了最外层的字典,但你也希望嵌套的字典成为类型
ExtendedDict
。要做到这一点,您可以在
__init__
方法像这样的东西:
from collections import UserDict
# use UserDict to avoid subclassing issues with the builtin type
class ExtendedDict(UserDict):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for k, v in self.items():
if isinstance(v, dict):
extended_value = ExtendedDict(v)
self[k] = extended_value
def getRequired(self, key, default=None):
... # same as you had it
然后你可以看到嵌套的字典(无论嵌套有多深)也会变成
扩展的Dict
:
# Create a nested dictionary
nested_dict = {
'person1': {'name': 'Alice', 'age': 30},
'person2': {'name': 'Bob', 'age': 25},
'person3': {'name': 'Charlie', 'age': 40}
}
# Create an instance of ExtendedDict
extended_nested_dict = ExtendedDict(nested_dict)
person = extended_nested_dict.getRequired('person1')
age = person.getRequired('age')
name = person.getRequired('name')
print(f'{name} is {age} years old')
assert type(person) is ExtendedDict # True
如果您还想在其他嵌套集合(如列表、元组等)中使用,则需要进行一些额外的调整。