簡體   English   中英

建議使用一個getter返回一個與setter設置不同的值嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM