2010-02-03 33 views
6

我應該在哪裏編寫用於檢查類屬性有效性的代碼? (例如:「金額」應該是一個正整數,「電子郵件」應該是一個正確的電子郵件格式的字符串)在設置方法,在某處我使用(使用try/catch)或其他。在Python類中檢查屬性的有效性

如果我在setter方法中檢查有效性,它可能看起來很醜(就像類型檢查)。但是如果我在使用它時檢查它,重複使用的代碼可能會在多次使用時出現。

(對不起,我英文不好。)

回答

4

肯定做的二傳手,如果你需要做的。

首先,setter可能比getters更少被調用,所以你的工作量減少了。

其次,您提前發現問題。

第三,它保持對象的內部狀態一致。保持不良數據意味着你知道你的對象是「正確的」。

+0

+1:對象的內部狀態必須完美,一致,正確。 – 2010-02-03 19:02:09

2

如果它看起來像醜陋的類型檢查,那可能是因爲它。如果「數量」絕對需要是一個正整數,並且模塊的其餘部分如果不是很糟糕,那麼您需要進行一些類型檢查。

雖然這樣做的python方式只是檢查您需要的實際屬性。

在正整數示例中,這意味着不檢查該值是否是Int對象,而是檢查它是否具有值,並且該值是否大於0.這樣可以讓其他程序員傳遞類似於您的方法對象數字,沒有嚴格限制他們的類型。

電子郵件的例子也是一樣的 - 檢查它的格式是否正確(匹配您使用的任何電子郵件正則表達式),但不要堅持它是Str類的一個實例。不要堅持你的有效性檢查中的任何東西,除了你將要使用的屬性。