2017-06-18 77 views
0

我对OOP相当陌生, - 所以这可能是一个愚蠢的问题。请温柔,请...不支持的类型timedelta天, - 当试图制作Timedelta类的扩展版本时

我想要做一个类,就像datetime.timedelta -class,但有一些修改(如:如果有超过1天的时间价值,那么它仍然会将其输出为小时和分钟;并且该秒不会被打印)。

我的计划是将timedelta对象作为输入到类中,也扩展了datetime.timedelta -class - 但这给我带来了问题。这里是我的代码:

class my_own_timedelta_class(datetime.timedelta): 

    def __init__(self, timedelta_object): 
    self.foo = 'bar' # not important. 

test_duration = datetime.timedelta(days=3, hours=5, minutes=20, seconds=7) 
testing = my_own_timedelta_class(test_duration) 

而且它给我这个错误:

unsupported type for timedelta days component: datetime.timedelta 

我为什么会得到这个错误?我所做的只是将timedelta_object传递给构造函数 - 我什至不做任何事情,它仍然抱怨!

我也想过把秒数传递给my_own_timedelta_class,但是我认为通过整个对象会更“干净”。

有没有更好的方法来做到这一点?

回答

1

您目前正在努力做到既inheritance

class my_own_timedelta_class(datetime.timedelta) 

composition

def __init__(self, timedelta_object): 

这就像说:“我的新类一辆车,但它也包含一辆车”。选择一个或另一个;两者都没有意义。

在这种特殊情况下,我会推荐做作文,因为子类timedelta会很麻烦。只需从timedelta删除遗传,你很好去:

class my_own_timedelta_class: 
    def __init__(self, timedelta_object): 
     self.delta= timedelta_object 
     self.foo = 'bar' # not important. 
+0

甜。感谢您的回答。这样可行。我可以让你详细说明,为什么会引发Python抛出这个错误:'不支持timedelta days组件的类型:datetime.timedelta'?例如......是因为'东西是汽车,不能包含汽车'或是因为'包含汽车的东西不能成为汽车'。我希望这个额外的问题是有道理的。 – Zeth