模拟程序的类继承顺序



这是一个关于类继承正确顺序的基本问题。
基本上,我试图写一个数值模拟来解决一个物理模型,细节并不重要(我碰巧用python写这个),这是一个众所周知的算法,通过在空间体积上迭代来解决。

我认为我需要的类是:

  • Setup:定义所有模拟参数的类,如体积大小,并具有检查正确参数类型的方法,计算派生参数等。
  • Solver:包含求解
  • 的实际算法
  • Output:包含所有plot输出的句柄,并可以访问保存文件等

我还需要一个运行方法,它可以运行求解器并定期(在设置中定义周期)运行一些输出函数。

  1. 在一个高质量的程序中,哪个类会继承哪个?(我猜输出继承自Solver继承自Setup)
  2. run方法属于哪里?也许应该有一些额外的基类,如用户交互的接口,并包括运行方法?
  1. 有一个概念鼓励使用组合而不是继承(http://en.wikipedia.org/wiki/Composition_over_inheritance),所以我想说,如果你真的不需要继承,不要使用它(它们可以是独立的对象或函数,在python中就像对象)。

  2. 如果你用对象建模,run()应该在#Solver中。回想一下,接口的概念在python中不像在其他语言中那样是必需的,因此您可以使用对象或函数来实现所需的算法。

你有Java背景吗?

首先,您没有说明任何类都应该从另一个类继承。因此,您可能不需要像您认为的那么多类。

Solver #包含求解

的实际算法

如果它只是一个函数,你不妨让它作为一个自由函数。

Output #包含所有plot输出的句柄,并可以访问保存文件等。

如果函数没有共享状态,它可以很容易地成为一个模块。

至于run方法,只要把它贴在最方便的地方。Python的好处是,您可以在没有任何类的情况下开始原型,并且只要在发现自己多次传递相同的数据集时重构成一个类即可。