super().__ new__ call:Object不带参数

时间:2015-02-07 17:00:58

标签: python oop inheritance

我试图将datetime.date继承到一个带有额外参数的新对象中:

class FullDate:
    def __new__(cls, lst, date):  # initiate the date class - bit complicated
        inst = super(FullDate, cls).__new__(cls, date.year, date.month, date.day)
        # do stuff

当我尝试制作日期的实例时,我得到以下错误:

Traceback (most recent call last):
  File "<pyshell#55>", line 8, in <module>
    to_load = FullDate(y[key], key)
  File "/home/milo/Documents/Codes/PyFi/lib/Statement/Classes.py", line 518, in __new__
    inst = super(FullDate, cls).__new__(cls, date.year, date.month, date.day)
TypeError: object() takes no parameters

我一直在研究为什么会发生这种情况但到目前为止已经出现空洞。

3 个答案:

答案 0 :(得分:2)

您实际上并非从FullDate派生datetime.date

import datetime
class FullDate(datetime.date):
...

但是,我不太确定这会像你希望的那样成功;在大多数实现中,datetime.date实际上来自C库。

答案 1 :(得分:1)

您没有延长datetime.date。尝试:

class FullDate(date):

如果省略基类(日期),实际上是扩展了object,其构造函数中没有参数。

答案 2 :(得分:1)

两件事。首先,确保您实际上是从日期继承。其次,更常见的模式是在子类上定义新的__init__方法。类似的东西:

def __init__(self, new_arg, *args, **kwargs):
    self.new_arg = new_arg
    super(child_class, self).__init__(args, kwargs)