拆分 class 定义,完全控制 subclass
Split class definition with full control over subclass
我有一个相当冗长的 class 用于数据分析。在这个 class 中有输入、输出、绘图、不同分析步骤等功能。我真的很想将此 class 拆分为更小、更易于阅读的子 classes.
最简单的方法当然是定义一个superclass然后继承多个subclass。然而,这不是我想要的,因为 on subclass 的函数不能改变另一个 subclass.
的变量
我想要的是将 class 定义拆分为多个文件,我可以在其中对某些方法进行分组。
结构应该是这样的:
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
看看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 中的内置模块名称)。
所有基础 类 可能驻留在单独的模块中,并且当在基础 类 之一中设置属性时,只需假设它在所有其他 类.[=14= 中可用]
我有一个相当冗长的 class 用于数据分析。在这个 class 中有输入、输出、绘图、不同分析步骤等功能。我真的很想将此 class 拆分为更小、更易于阅读的子 classes.
最简单的方法当然是定义一个superclass然后继承多个subclass。然而,这不是我想要的,因为 on subclass 的函数不能改变另一个 subclass.
的变量我想要的是将 class 定义拆分为多个文件,我可以在其中对某些方法进行分组。
结构应该是这样的:
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
看看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 中的内置模块名称)。
所有基础 类 可能驻留在单独的模块中,并且当在基础 类 之一中设置属性时,只需假设它在所有其他 类.[=14= 中可用]