代码之家  ›  专栏  ›  技术社区  ›  paullb

多重继承:采用0个位置参数,但给出了1个[重复]

  •  1
  • paullb  · 技术社区  · 7 年前

    在测试多重继承时,我有以下日期、时间和日期时间类继承权

    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 回复  |  直到 7 年前
        1
  •  1
  •   Blckknght    7 年前

    您的问题与多重继承问题无关。事实上,如果尝试调用 getDate 以…为例 date .

    问题的原因是你忘了列出 self 作为一个论点 取日期 (和) time.getTime 同样如此。调用该方法的实例将自动作为第一个位置参数传递,因此需要记住该方法。

        2
  •  1
  •   Bryan Oakley    7 年前

    错误是告诉你出了什么问题。你已经定义了 getDate 不接受任何参数。当你这样做的时候 someObject.someMethod() ,python自动将对象实例作为第一个参数传递(几乎通用命名 self )

    如果 取日期 应该在类的实例上调用,您需要这样定义它:

    def getDate(self):
        ...