我試圖將一些模塊包裝到類中,並開始玩屬性。在Python中創建一個類實例屬性只讀
將這兩個答案組合在一起:making instance attribute read-only和validating attributes。
我希望能夠創造DataFolder類的一個實例:
df = DataFolder(owner="me", path="/.data")
之後,我希望能夠允許編輯owner
屬性,但不是path
屬性。我希望能夠驗證初始化時刻的屬性(path
和owner
)以及之後(但僅owner
)。
class DataFolder(object):
_path = None
#----------------------------------------------------------------------
def __init__(self,owner,path):
self.path = path
self.owner = owner
@property
#----------------------------------------------------------------------
def owner(self):
return self._owner
@owner.setter
#----------------------------------------------------------------------
def owner(self,owner_value):
if "me" not in owner_value:
raise Exception("invalid owner")
self._owner = owner_value
@property
#----------------------------------------------------------------------
def path(self):
return self._path
@path.setter
#----------------------------------------------------------------------
def path(self,path_value):
if self._path is not None:
raise AttributeError("Cannot edit path of existing data folder")
if "dat" not in path_value:
raise Exception("invalid folder")
self._path = path_value
它是正確的/最好使用全局變量_path = None
和@path.setter
檢查if self._path is not None:
?代碼工作正常,但我想知道是否有更好的方法。
這似乎是一個合理的方式做到這一點 - 這是一個*類屬性*,不是*全局變量*。儘管如此,我會提出一個'ValueError'而不是基於'Exception'作爲無效參數。由於這看起來是有效的代碼,你可能會更好[codereview.se]。 – jonrsharpe
謝謝!將使用ValueError來代替。它在私有變量前面的「_」變得混亂,但我希望習慣它們:) –