getter return 的值与 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

如果您的 setter 和 getter 正在执行重要的工作,那么它们实际上不再是 setter 或 getter。尽管代码是正确的,但我会建议重命名(一个或两个)函数,以便在使用它们时清楚它们不是简单的 getter 和 setter。类似于:

company.set_value_option_record(123)
print(company.extract_value())

除非你出于某种原因绝对需要使用 @property@value.setter 装饰器。在这种情况下,请务必为 class.

的用户明确记录它