我正在寫一個庫,它解析一個文件,創建一個代表該文件的對象,並允許將該對象導出迴文件。有沒有一種方法可以確保對變量執行比@property驗證?
我想驗證所需的標題和列在任何時候這些值被更改。由於這個原因,我試圖用@property裝飾器設置驗證。
我注意到在@property的python文檔中,如果屬性名稱是'variable',他們使用'_variable'。我知道前面的一個下劃線是表示這個變量是爲弱內部使用而設計的。不過,我的印象是@property裝飾者的觀點是任何調用設置變量都會導致setter函數運行。
_headers = None
required_headers = ['FIELD_DELIM', 'VIDEO_FORMAT', 'FPS']
@property
def headers(self):
return self._headers
@headers.setter
def headers(self, value):
for header in self.required_headers:
if header not in value:
raise Exception
self._headers = value
儘管此代碼的工作,我知道我還可以做myObject._headers =值繞過我的二傳手。
有沒有一種方法可以確保始終執行驗證,而不依賴於用戶尊重_headers是否供內部使用?
作爲一個便箋,'_headers = None'設置_class_屬性,一個屬於類的所有實例共享,而不是_instance_屬性。另一方面,'@屬性'是針對每個實例的值。所以,你寫的代碼充其量是誤導性的。 – abarnert 2014-09-26 19:10:54
我從課堂上拿出_headers = None,實際上並不需要。謝謝你的提示。 – 2014-09-26 19:19:04