拆分类定义,完全控制子类

时间:2016-11-03 14:07:59

标签: python python-2.7 class subclassing

我有一个相当冗长的数据分析类。在这个类中,有输入,输出,绘图,不同分析步骤等功能。我真的想把这个类分成更小,更容易阅读的子类。

最简单的方法当然是定义一个超类,然后继承多个子类。但是,这不是我想要的,因为on on subclass的函数不能改变另一个子类的变量。

我想要的是将类定义拆分为多个文件,我可以将这些方法分组。

结构应该是这样的:

master.py   # contains something that puts together all the parts
io.py       # contains function for data input / output
plot.py     # contains functions for plotting / visualization of data
analyze1.py # contains functions to perform certain analysis steps
analyze2.py # contains functions to perform certain analysis steps

1 个答案:

答案 0 :(得分:2)

看看mixins:

<强> plot.py

class DataPlotter(object):
    def plot(self):
        # lots of code
        my_plot_lib.plot(self.data)  # assume self.data is available in instance

<强> io.py:

class DataIOProvider(object):
    def read(self, filename):
        # lots of code
        self.data = magic_data

<强> master.py:

from plot import DataPlotter
from io import DataIOProvider

class GodDataProcessor(DataPlotter, DataIOProvider):
    def run(self):
        self.read('my_file.txt')
        self.plot()

请注意,您应该将代码包装在某个包中以避免名称冲突(io是Python中的内置模块名称。)

所有基类都可以驻留在单个模块中,当在一个基类中设置属性时,只需假设它在所有其他类中都可用。