2011-10-12 108 views
2

在阿達,您可以定義自定義數據類型,如本在範圍內創建自定義數字數據類型?

type Day_Of_Month is range 1 .. 31; 

所以現在你可以創建一個Day_Of_Month變量,只能容納1到31之間的一個int這是不錯的,因爲我們沒有在想要更新值時通過適當的異常處理繼續進行條件檢查。

有沒有一種簡單的方法來在Python中做類似的事情?

+0

封閉或封裝邊界檢查的類是我能想到的唯一兩種方法。沒有像這樣的語言功能。 – brc

+0

查看'datetime'模塊。您可以創建和使用'datetime'對象來完成此操作。 – wberry

+1

我想我無意間把人們拋下了。這個例子只是我在網上找到的一個隨機的例子。我的代碼實際上是一個只能在1..10範圍內的數字。由於沒有簡單的方法來做到這一點,我只會堅持使用條件檢查。 –

回答

1

如果這個數據類型要經常使用,可能值得爲它創建一個類並覆蓋操作符,以使其更加無縫地工作。這樣,所有的異常處理仍然是數據類型的內部處理,並且它給了你很大的靈活性來定義諸如二月和三月的天數差異或者每個月的差異等。

+0

我不明白'datetime'模塊是如何實用的。 – jfs

+1

@JF:授予。我正在以更假設的方式思考。事實上,僅僅使用'datetime'模塊對於列出的例子來說是最有意義的。 – garbados

0

它是一個多回答評論:

你可以使用datetime模塊的日期和時間在Python工作。必要時它會提出適當的例外。

一般情況下,如果你有數據和某些你想在某些操作中保留的不變量,那麼創建一個類可以讓你在保持不變的情況下對數據執行這些操作。

注意:您不希望實現僅限制輸入/輸出操作的通用算術類:它不容易(請參閱decimal.Decimalfractions.Fraction),並且在這種情況下它不是有用的,例如,什麼是正確的結果是:

day_of_month + 1 

要回答它,你應該知道月份,年份(和時區有時)。因此,您開始實施datetime模塊和pytzdateutil包。