【问题标题】:Multiple Inheritance: takes 0 positional arguments but 1 was given [duplicate]多重继承:采用 0 个位置参数,但给出了 1 个 [重复]
【发布时间】:2019-05-16 20:48:31
【问题描述】:

在测试多重继承时,我有以下 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

【问题讨论】:

  • 应该是def getDate(self):,因为当你调用my_datetime.getDate()时,Python内部会传递self
  • @PatrickHaugh 我以前看过那个,但我没有注意到其中的区别,但我第二次看到它。谢谢!

标签: python-3.x multiple-inheritance


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    错误告诉你什么是错的。您已将 getDate 定义为不接受任何参数。当您执行someObject.someMethod() 时,python 会自动将对象实例作为第一个参数传递(几乎普遍命名为self)。

    如果应该在类的实例上调用@ 987654324,则需要定义它:

    def getDate(self):
        ...
    

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2013-10-28
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2019-08-19
      相关资源
      最近更新 更多