[英]Is it advisable to have a getter that return a different value than that set by the setter?
我覺得這對我來說是切實可行的,但由於可能期望獲得與輸入相同的輸出,因此也有些混亂。
@property
def value(self):
return next(
(option.key for option in self._options
if option.id == self._value),
None)
@value.setter
def value(self, value):
idoption = None
if isinstance(value, Option):
idoption = next(
(option.id for option in self._options
if option.id == value.id), None)
elif isinstance(value, int):
idoption = next(
itertools.chain(
(option.id for option in self._options
if option.key == value),
(option.id for option in self._options
if option.id == value)
), None)
elif isinstance(value, str):
idoption = next(
(option.id for option in self._options
if option.key == value), None)
if idoption:
super()._set_value(idoption)
else:
raise InvalidOptionError(entity=self.entity_name,
field=self.name,
value=value)
運行時:
company.value = 123
print(company.value) # returns company_1
如果您的安裝者和獲取者正在執行重要的工作,那么他們實際上不再是安裝者或獲取者。 盡管代碼是正確的,但我還是建議重命名功能(一個或兩個),以便在使用它們時很清楚它們不是簡單的getter和setter。 就像是:
company.set_value_option_record(123)
print(company.extract_value())
除非你絕對需要使用@property
和@value.setter
出於某種原因裝飾。 在這種情況下,請確保為您的班級用戶顯式記錄它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.