Python中的继承:类型错误,参数数目错误

2024-05-12 13:36:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从父类继承类构造函数。为什么我已经试着去纠正这堆代码了?在

父类:

class Submit_Copasi_Job(object):
    '''
    Submit a properly formatted copasi file to sun grid engine
    '''
    def __init__(self,copasi_file,report_name):
        self.copasi_file=copasi_file
        self.copasiML_str=self._read_copasiML_as_string()
        self.report_name=report_name
        self.submit_copasi_job_SGE()

    def _read_copasiML_as_string(self):
        '''
        Read a copasiML file as string 
        '''
        assert os.path.exists(self.copasi_file), "{} does not exist!".format(self.copasi_file)
        with open(self.copasi_file) as f:
            fle = f.read()
        return fle

        ....

子类(它试图使用super(SubClass, self).__init__(...),但显然我有问题)

^{pr2}$

运行代码

fle='D:\\MPhil\\Model_Building\\Models\\TGFB\\Fli1_Models\\M7.cps'
s=Submit_Copasi_Multijob(fle,'rep.txt')
print s.test()

到目前为止,我所有的尝试都导致了类似的错误:

   s=Submit_Copasi_Multijob(fle,'rep')

TypeError: __init__() takes exactly 1 argument (3 given)

Tags: 代码nameselfreportreadstringinitas
1条回答
网友
1楼 · 发布于 2024-05-12 13:36:37

问题是子类的__init__方法只接受一个参数,Python将自动提供该参数作为对新创建对象的引用。因此,当你实例化一个Submit_Copasi_Multijob对象时,你不能提供任何参数,也就是说,你当前编写代码的方式实例化你的子类对象的正确方法是

new_obj = Submit_Copasi_Multijob()

当然,在执行__init__时这将失败,因为名称copasi_file和{}不会被定义。在

通过让子类的__init__方法接受三个参数而不是一个参数来解决此问题:

^{pr2}$

但是,如果这是您在子类的__init__方法中唯一要做的事情(即没有# other stuff),就没有必要重写基类的__init__方法。在这种情况下,只需省略Submit_Copasi_Multijob__init__的定义。在

相关问题 更多 >