2017-06-18 61 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