模拟程序的类继承顺序

时间:2013-05-13 14:16:03

标签: python inheritance

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

我认为我需要的课程是:

  • 设置:定义所有模拟参数(如卷大小)的类,并具有检查正确参数类型,计算派生参数等的方法。
  • 解算器:包含解决的实际算法
  • 输出包含所有绘图输出的句柄,并且可以访问保存文件等。

我还需要一个可以运行求解器的run方法,并定期(在Setup中定义句点)运行一些输出函数。

  1. 在一个高质量的程序中,哪个类会继承哪个? (我的猜测输出继承自Solver继承自安装程序)
  2. run方法属于哪里?也许应该有一些额外的基类,比如用户与之交互的接口,并包含run方法?

2 个答案:

答案 0 :(得分:0)

你是否有机会来自Java背景?

首先,您没有表明您的任何课程应该从另一个课程继承。就此而言,你可能不需要像你想象的那样多的课程。

  

Solver#包含解决的实际算法

如果它只有一个功能,你可以把它留作免费功能。

  

输出#Contains所有绘图输出的句柄,并且可以访问保存文件等。

如果这些功能没有共享状态,那么它就像一个模块一样容易。

至于run方法,只需将它贴在最方便的地方。 Python的优点在于你可以在没有任何类的情况下开始原型设计,只要你发现自己经常传递相同的数据集,就可以重构为类。

答案 1 :(得分:0)

  1. 有一个概念鼓励使用组合而不是继承(http://en.wikipedia.org/wiki/Composition_over_inheritance),所以我想如果你真的不需要继承就不要使用它(它们可以是独立的对象或函数,在python中就像对象一样。)

  2. 如果使用对象对此进行建模,则run()应位于#Solver中。回想一下,与其他语言一样,python中不需要接口的概念,因此您可以使用对象或函数来使用您需要的算法。