如何使用词典构建多级类

时间:2015-07-14 09:43:03

标签: python oop

我需要一个像:

这样的结构
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.

最实用的方法是什么?

1 个答案:

答案 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}}}