假设满足我需要的对象名为classdic
,那么{
查询、更新、添加和删除数据都可以通过类样式的方式和dict样式的方式(称为“两种方式”)来实现。
当属性或键不存在时,类dic的实例可以自动构建它,并使其等于instance和dict上的默认值,因此我们可以双向查询(注意:不添加,只查询)。
那么,如何实现这个类呢?在
下面的示例显示了此类的实例将如何工作:
dic={'one':1,
'two':{'four':4,'five':{'six':6,'seven':7}},
'three':3}
cdic=classdic(dic,default=100)
-------------------query in two ways-------------------------------------------
>>> cdic.one
1
>>> cdic.two
{'four':4,'five':{'six':6,'seven':7}}
>>> cdic.two.five.six
6
>>> cdic['two']['five']['six']
6
-------------------update in two ways-------------------------------------------
>>> cdic['two']['five']['six']=7
>>> cdic.two.five.six
7
>>> cdic.two.five.six=8
>>> cdic['two']['five']['six']
8
-------------------add in two ways-------------------------------------------
>>> cdic['two']['five']['eight']=8
>>> cdic.two.five.eight
8
>>> cdic.two.five.nine=9
>>> cdic['two']['five']['nine']
9
-------------------query default in two ways-------------------------------------------
>>> print cdic['ten']
100
>>> cdic.ten
100
>>> print cdic.eleven
100
>>> cdic['eleven']
100
-------------------the final state of cdic-------------------------------------------
>>> cdic
{'eleven': 100, 'three': 3, 'two': {'four': 4, 'five': {'nine': 9, 'seven': 7, 'six': 8, 'eight': 8}}, 'ten': 100, 'one': 1}
子类
collections.defaultdict()
:这将而不是自动创建自身的嵌套实例;您需要遍历输入字典并自己创建嵌套对象。在
但它确实提供了属性访问和默认值:
^{pr2}$要从现有字典构建树,请使用
from_dictionaries()
类方法:请注意,字典中的键可以屏蔽方法;当插入与字典方法匹配的键时,请记住:
如果你想做
您还应该重写setattr
^{pr2}$这是Martijn Pieters的answer的变体,它是answer的变体(它本身是this的变体,它基于James Robert的blog entry)。然而,与Martijn不同的是,it会自动创建自身的嵌套实例。还添加了一个自定义
__repr__()
。在相关问题 更多 >
编程相关推荐