如何从python中相同的重载派生类方法中调用基类方法?

时间:2014-01-14 07:26:56

标签: python python-2.7

我在python项目中设置了以下类,

在MicroSim.py中

class MicroSim:
    def __init__(self, other_values):
        # init stuff here

    def _generate_file_name(self, integer_value):
        # do some stuff here

    def run(self):
        # do some more stuff
        self._generate_file_name(i)

在ThresholdCollabSim.py

from MicroSim import MicroSim

class ThresholdCollabSim (MicroSim):
    # no __init__() implmented

    def _generate_file_name(self, integer_value):
        # do stuff here
        super(ThresholdCollabSim, self)._generate_file_name(integer_value) # I'm trying to call MicroSim._generate_file_name() here

    # run() method is not re-implemented in Derived!

在MicroSimRunner.py

from ThresholdCollabSim import ThresholdCollabSim

def run_sims(values):
    thresholdSim = ThresholdCollabSim(some_values) # I assume since ThresholdCollabSim doesn't have it's own __init__() the MicroSim.__init() will be used here
    thresholdSim.run() # again, the MicroSim.run() method should be called here since ThresholdCollabSim.run() doesn't exist

当我运行此代码时,我收到错误消息,

  

Traceback(最近一次调用最后一次):文件“stdin”,第1行,in      在run_sims中的文件“H:... \ MicroSimRunner.py”,第11行       thresholdSim.run()文件“H:... \ MicroSim.py”,第42行,在运行中       self._generate_file_name(r)文件“H:... \ ThresholdCollabSim.py”,第17行,在_generate_file_name中       super(ThresholdCollabSim,self)._ generate_file_name(curr_run)TypeError:未绑定的方法_generate_file_name()必须是   用MicroSim实例作为第一个参数调用(得到int实例   代替)

我试图在这里搜索这样的问题并找到类似的帖子并尝试了所有解决方案,但这个错误似乎并没有消失。我尝试将有问题的行改为

super(ThresholdCollabSim, self)._generate_file_name(self, curr_run)

但它什么都没改变(同样的错误)。我在Python编程方面相对较新,所以这可能只是一个愚蠢的错误。任何帮助深表感谢。谢谢!

2 个答案:

答案 0 :(得分:1)

您忘记了派生self方法中的_generate_file_name参数。此外,您需要使用class MicroSim(object)使MicroSim成为新式类。

答案 1 :(得分:1)

作为补充。

您在旧式课程中使用super

super文档中我们知道:

  

super()仅适用于新式类。

新风格的课程是

  

任何继承自object的类。