这是一个关于类继承正确顺序的基本问题。
基本上,我试图写一个数值模拟来解决一个物理模型,细节并不重要(我碰巧用python写这个),这是一个众所周知的算法,通过在空间体积上迭代来解决。
我认为我需要的类是:
- Setup:定义所有模拟参数的类,如体积大小,并具有检查正确参数类型的方法,计算派生参数等。
- Solver:包含求解 的实际算法
- Output:包含所有plot输出的句柄,并可以访问保存文件等
我还需要一个运行方法,它可以运行求解器并定期(在设置中定义周期)运行一些输出函数。
- 在一个高质量的程序中,哪个类会继承哪个?(我猜输出继承自Solver继承自Setup)
- run方法属于哪里?也许应该有一些额外的基类,如用户交互的接口,并包括运行方法?
-
有一个概念鼓励使用组合而不是继承(http://en.wikipedia.org/wiki/Composition_over_inheritance),所以我想说,如果你真的不需要继承,不要使用它(它们可以是独立的对象或函数,在python中就像对象)。
-
如果你用对象建模,run()应该在#Solver中。回想一下,接口的概念在python中不像在其他语言中那样是必需的,因此您可以使用对象或函数来实现所需的算法。
你有Java背景吗?
首先,您没有说明任何类都应该从另一个类继承。因此,您可能不需要像您认为的那么多类。
Solver #包含求解
的实际算法
如果它只是一个函数,你不妨让它作为一个自由函数。
Output #包含所有plot输出的句柄,并可以访问保存文件等。
如果函数没有共享状态,它可以很容易地成为一个模块。
至于run方法,只要把它贴在最方便的地方。Python的好处是,您可以在没有任何类的情况下开始原型,并且只要在发现自己多次传递相同的数据集时重构成一个类即可。