我正在寻找一种优雅的方法,使用一些嵌套的dicts和列表(即javascript样式的对象语法)在dict上使用属性访问来获取数据.
例如:
>>> d = {'a': 1, 'b': {'c': 2}, 'd': ["hi", {'foo': "bar"}]}
Run Code Online (Sandbox Code Playgroud)
应该可以通过这种方式访问:
>>> x = dict2obj(d)
>>> x.a
1
>>> x.b.c
2
>>> x.d[1].foo
bar
Run Code Online (Sandbox Code Playgroud)
我认为,如果没有递归,这是不可能的,但是什么是获得dicts的对象样式的好方法?
由于我在 Python 中经常使用类型提示,因此我遇到了递归函数接受dict,str作为键和int或dict作为值 ( Dict[str, Union[int, Dict[...]]) 的场景。此时的问题是可能的dict-value 也有str作为键和int或dict作为值 ( Dict[str, Union[int, Dict[Dict[str, Union[int, Dict[...]]]])。
但是,我不知道传递的字典有什么深度。是否有可能通过类型提示来可视化这种重复模式?
我有一个对象定义如下
class a():
@property
def prop(self):
print("hello from object.prop")
@property
def prop1(self):
print("Hello from object.prop.prop")
Run Code Online (Sandbox Code Playgroud)
我打电话的时候
>>> obj = a()
>>> obj.prop
hello from object.prop
>>> obj.prop.prop
Run Code Online (Sandbox Code Playgroud)
我收到以下回溯错误
Traceback (most recent call last):
File "object_property.py", line 13, in <module>
a.prop.prop1
AttributeError: 'NoneType' object has no attribute 'prop1'
Run Code Online (Sandbox Code Playgroud)
我想弄清楚的是我是否可以为对象定义嵌套属性?