【问题标题】:partial function overload in pythonpython中的部分函数重载
【发布时间】:2015-08-12 21:53:09
【问题描述】:

我不知道如何命名标题,所以如果有人知道具体名称,请纠正我。 这是我的情况:

class Abs(object):
    def run(self, var):
        raise NotImplementedError
class Sub1(Abs):
    def run(self, var):
        var = get_var()
        # Sub1 RUN
class Sub2(Abs):
    def run(self, var):
        var = get_var()
        #Sub2 RUN

如您所见,我必须使用从“接口”类继承的类,并且它们都具有不同的运行功能。尽管两者之间的一些运行函数不同,但还是有一些相似的代码。 (如您在示例中看到的)有没有办法在“接口”类中编写公共部分,以免重复两次?

【问题讨论】:

    标签: python function class inheritance overloading


    【解决方案1】:

    写出公共部分,放在基类的新方法中。考虑给它一个以下划线开头的名称(Python 相当于受保护的访问)。从每个需要它的地方调用 if。

    class Abs(object):
        def run(self, var):
            raise NotImplementedError
    
        def _common_things(self,var):
            pass
    
    class Sub1(Abs):
        def run(self, var):
            self._common_things(var)
            # etc
    
    class Sub2(Abs):
        def run(self, var):
            self._common_things(var)
            # etc
    

    【讨论】:

    • 谢谢,这就是我最终所做的。
    【解决方案2】:

    接口不应该实现代码,但在 python 中没有真正的接口,所以没关系。

    您可以将var = get_var() 放在基类(Abs)中,然后其他两个方法如下所示:

    def run(self, var):
      super(Sub1, self).run(var)
      # Sub1 run
    
    def run(self, var):
      super(Sub2, self).run(var)
      # Sub2 run
    

    super() 将调用基类(“接口”)中的代码

    【讨论】:

    • 感谢您的快速回复!我会试试这个。我看不出如何使用它来做我给出的第二个示例(时间示例),对此有什么帮助吗?
    • 方法不应该自己计时。无论运行什么调用都应该计时。您可以创建一个方法run,只计算执行时间并调用_run,然后在_run 中进行所有登录。
    • @lonut 谢谢你,这对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2015-09-25
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多