实现几个非常相似的函数有什么好方法?

时间:2015-11-01 18:32:26

标签: python oop

我需要在python中使用几个非常相似的绘图函数来共享许多参数,但在某些参数上有所不同,当然它们的作用也略有不同。这是我到目前为止所提出的:

  • 我认为,显然只是一个接一个地定义它们并复制它们共享的代码是可能的,虽然不是很好,但我认为。
  • 还可以转移"共享"辅助函数的部分代码,并从不同的绘图函数中调用它们。这会使它变得乏味,以后添加所有功能应该具有的功能。
  • 最后我还想到实施一个"大"函数,使可能不需要的参数可选,然后根据附加参数决定在函数体中做什么。我相信,这会让人很难找到特定情况下真正发生的事情,因为人们会面对一片争论。

我可以排除第一种选择,但我很难在第二种和第三种之间做出决定。所以我开始疑惑:是否有另一种,也许是面向对象的方式?如果没有,如何在第二和第三选项之间做出决定?

我希望这个问题不是太笼统,我想这不是特定于python的,但是因为我对编程很新(我从未做过OOP)并且现在首先想到这个,我想我将添加python标记。

修改

正如许多人所指出的那样,这个问题很普遍,而且本来是这样的,但据我所知,这使得回答相当困难。所以,这里有一些关于问题的信息让我问:

我需要绘制模拟数据,因此所有绘图问题都有共同的模拟参数(文件位置,物理参数......)。我也希望图形设计相同。但是根据数量,一些图将是1D,一些2D,一些应该包含多个图,有时我需要标准化数据或在绘制之前采用对数。输出格式也可能不同。

我希望这有点帮助。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?您可以创建一个Base类,该类具有方法foo,该方法是执行所有类似代码的基本共享方法。然后,对于不同的类,您可以继承Base并超级感兴趣的方法,并将实现扩展到您需要的任何额外功能。

这是一个如何工作的例子。请注意我在Python 2和Python 3中如何使用super之间提供的不同示例。

class Base:            
    def foo(self, *args, **kwargs):
        print("foo stuff from Base")
        return "return something here"


class SomeClass(Base):
    def foo(self, *args, **kwargs):
        # python 2
        #x = super(SomeClass, self).foo(*args, **kwargs)
        # python 3
        x = super().foo(*args, **kwargs)
        print(x)
        print("SomeClass extension of foo")

s = SomeClass()
s.foo()

输出:

foo stuff from Base
return something here
SomeClass extension of foo from Base

答案 1 :(得分:0)

需要提供更多信息才能完全理解背景。但是,从一般意义上说,我会混合所有这些。使用帮助函数来实现"共享"部分,也使用条件语句。老实说,很多事情都归结为你更容易做到的事情?