這個@property decorator的使用適合獲得一個很好的實例字段封裝嗎?我試圖實現Foobar類的客戶端不能以任何方式爲foobar實例的字段vel
指定任意值,事實上繞過屬性設置器方法中定義的賦值規則。在Python中封裝實例字段的方式
謝謝。
class Foobar(object):
def __init__(self):
self._vel = 0
@property
def vel(self):
return self._vel
@vel.setter
def vel(self, v):
self._vel = v if v > 0 else 0
該領域似乎封裝良好。
>>> foobar = Foobar()
>>> foobar.vel
0
>>> foobar.vel = -1
>>> foobar.vel
0
>>> foobar.vel = 1
>>> foobar.vel
1
呵呵,有沒有問題? – nosklo 2011-03-16 19:10:21
好點,固定。 – Paolo 2011-03-16 19:17:02
請注意,提高ValueError可能是更好的做法,而不是靜默地限制值,這可能會造成混淆。我肯定會這樣做,如果檢查離散值(例如枚舉類型或字符串格式檢查);對於速度我不確定。 – 2011-03-16 19:33:50