2012-06-01 124 views
2

我有一個類和屬性writable_attributes這是屬性,應該是可以賭設置數組時,類實例化:Python類二傳手限制

class User(object): 
    writable_attributes = ['username','email'] 

我希望能夠引發錯誤如果另一個屬性被設置,如果它不在writable_attributes的列表中。我正在瀏覽一個通用的setter,但我找不到任何符合我需求的東西。喜歡的東西:

user = User() 
user.foo = 'bar' # This should raise an error since only `username` and `email` can be set 

回答

2

您可能也有興趣__setattr__。這覆蓋了對象上的屬性設置。 插槽有其他併發症,setattr沒有。

+0

嗯..我必須測試這個錯誤。它現在有效。謝謝。 –

2

這聽起來像你真的要找的是__slots__

+1

__slots__給我沒有控制的機會,而setter可能允許我在拋出錯誤之前做一些檢查,如果屬性不可寫的話。通用的setter將允許我例如根據權限執行檢查,以查看當前用戶是否被允許設置該屬性。 –

+1

這就是屬性。 –

2

首先,重新考慮是否真的需要這樣做。它通常是過度工程。如果您確定確實需要,請查看__slots__ - 如果您將writable_attributes重命名爲__slots__,則嘗試創建更多內容將會產生錯誤。如果你需要避免一些現有的設置被設置,那麼你可以使用屬性來完成它。