2015-02-07 58 views
0

我想继承datetime.date到一个新的对象,它需要一个额外的参数:当我尝试做的一个实例超().__ new__电话:对象没有参数

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 

我一直在研究为什么发生这种情况,但都拿出了空为止。

+0

既然你[以前继承'datetime.date'(http://stackoverflow.com/q/283​​32396/3001761),你为什么要删除它? – jonrsharpe 2015-02-07 17:05:55

+0

@jonrsharpe这让我感到最惊讶!我认为我在更新类时继承了它,然后将错误的文件推送到了git。现在感觉哑巴... – Scironic 2015-02-07 17:06:53

回答

2

您实际上并不从datetime.date导出FullDate

尝试

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

不过,我不能肯定这是去上班了像你希望它会; datetime.date实际上来自C库,在大多数实现中。

1

您未扩展datetime.date。尝试:

class FullDate(date): 

如果省略基类(日期),你实际上是扩展其在它的构造函数没有参数的object

1

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

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

我同意,但必须引用你对此前的q:http://stackoverflow.com/questions/28332396/init-argument-mismatch-between-super-and-subclass在这种特殊情况下__init__ doesn没有工作。 – Scironic 2015-02-07 17:15:46