多重继承:接受0个位置参数,但给出1个

时间:2018-12-16 03:01:30

标签: python-3.x multiple-inheritance

在测试多重继承时,我遵循以下Date,Time和DateTime类的继承关系

class time:
    def __init__(self, time):
        self.time = time 

    def getTime():
        return self.time;

class date:
    def __init__(self, date):
        self.date = date

    def getDate():
        return self.date

class datetime(time,date):
    def __init__(self, input_time, input_date):
        time.__init__(self, input_time)
        date.__init__(self, input_date)

实例化并检查日期可以正常工作:

my_datetime = datetime("12PM","Today")
my_datetime.date
'Today'

但是运行getDate函数会产生一个参数错误,我不明白为什么

my_datetime.getDate()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-120ecf58a608> in <module>
----> 1 my_datetime.getDate()

TypeError: getDate() takes 0 positional arguments but 1 was given

2 个答案:

答案 0 :(得分:1)

您的问题与多重继承问题无关。实际上,尝试在getDate的实例上调用date时,会遇到完全相同的错误。

此问题的原因是您忘记列出self作为getDate(以及time.getTime)的参数。调用该方法的实例将作为第一个位置参数自动传递,因此您需要牢记这一点。

答案 1 :(得分:1)

错误告诉您出了什么问题。您已将getDate定义为不接受任何参数。当您执行someObject.someMethod()时,python会自动将对象实例作为第一个参数(几乎统称为self)传递。

如果应在类的实例上调用getDate,则需要这样定义:

def getDate(self):
    ...