我需要一个像:
这样的结构mainclass["identificator 1"].categories["identificator 2"].plots["another string"].x_values
我用很多类写这个:
class c_mainclass(object):
def __init__(self):
self.categories={}
self.categories["identificator 2"]=c_categories()
class c_categories(object):
def __init__(self):
self.plots={}
self.plots["another string"]=c_plots()
class c_plots(object):
def __init__(self):
self.x_values=[2,3,45,6]
self.y_values=[5,7,8,4]
mainclass={}
mainclass["identificator 1"]=c_mainclass()
#mainclass["identificator bla"]=c_mainclass(bla etc)
print(mainclass["identificator 1"].categories["identificator 2"].plots["another string"].x_values)
我想将所有内容定义为仅在一个类中的“子属性”,如:
class c_mainclass={}:
setattr(mainclass["identificator 1"],"categories",{})
...etc.
最实用的方法是什么?
答案 0 :(得分:0)
您可以执行类似Autovivification检查this SO post的操作。
(这是从链接的SO问题的答案中粘贴的。)
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
a = AutoVivification()
a[1][2][3] = 4
a[1][3][3] = 5
a[1][2]['test'] = 6
print a
{1: {2: {'test': 6, 3: 4}, 3: {3: 5}}}