嵌套类的替代方案?

时间:2015-07-13 10:05:53

标签: python class nested pickle

我正在使用嵌套类来构建我的数据和数据特定的函数(在代码片段中无法获得缩进,抱歉):

class test:
    class AA:
        def __init__(self):
            self.name = "ZZ-top"
            self.flag = False
        def reset(self):
            self.name = "AArdvark"
            self.flag = True
    class BB:
        def __init__(self):
            self.num = 11
        def checker(self):
            if self.num > 10:
                test.AA.name = "Toasty"                     
    def __init__(self):
        self.AA = self.AA()
        self.BB = self.BB()

对我而言,这是按类别隔离数据的最简单,最简单的方法。我经常有来自不同来源的相同数据,并希望有相应的数据。例如。 data.image.latitude和data.csv.latitude。我还想拥有从多个类中获取或设置数据的函数。例如:检查功能。

问题是python似乎不喜欢嵌套类。我遇到了pickle的麻烦(不能pickle类'test.BB.num'。这似乎是一个常见的pickle /嵌套类问题)和一些想要相邻类的信息的函数不起作用。我想我必须放弃嵌套类。

构建此数据的python'esque正确方法是什么?我应该只拥有一个巨大的大班(self.AA_timeofday ... self.ZZ_timeofday),其中包含所有功能还是有更好的东西?

1 个答案:

答案 0 :(得分:1)

很少需要嵌套类,除了将类的名称包装在另一个名称空间中并打破酸洗之外,功能上没有区别。

只需将类放在模块的全局级别:

class AA:
    def __init__(self):
        self.name = "ZZ-top"
        self.flag = False
    def reset(self):
        self.name = "AArdvark"
        self.flag = True

class BB:
    def __init__(self):
        self.num = 11
    def checker(self):
        if self.num > 10:
            test.AA.name = "Toasty"   

class test:                  
    def __init__(self):
        self.AA = AA()
        self.BB = BB()