[英]property: call setter in init()
我有一個簡單的課程,像這樣:
class TestVolume:
def __init__(self, volume: float):
self._volume = volume * 1000
self.volume = self._volume
@property
def volume(self):
return self._volume / 1000
@volume.setter
def volume(self, value):
if value <= 0:
raise ValueError("Volume must be > 0")
self._volume = value
基本上,我實例化帶有音量的TestVolume
對象,該音量應始終為正浮點數。
我希望volume屬性是該類的屬性。 但是我也想在創建對象時檢查音量。 這是正確的方法嗎?
setter是(大部分情況下)唯一需要直接修改_volume
方法。 只需使用__init__
的屬性即可; 是否嘗試捕獲設置程序可能引發的ValueError
取決於您。
def __init__(self, volume: float):
try:
self.volume = volume * 1000
except ValueError:
self.volume = 0
在這里, __init__
正在執行一項策略,即在創建對象時將負音量轉換為0。 設置員的其他用戶可以自行決定在發生異常情況時該怎么做。
您的代碼是正確的,但不適用於創建新對象。 我對在__init__
訪問@property的方式不熟悉。 (Python 2.7)您可以執行的是插入一個assert語句。 如果用戶輸入無效,將引發錯誤。 如果要設置默認值,可以將其包含在try.. catch
塊中。
class TestVolume:
def __init__(self, volume: float):
assert volume > 0
self._volume = volume * 1000
self.volume = self._volume
您的其余代碼保持不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.