是否建议使用一个返回与setter设置的值不同的getter?

时间:2015-06-02 12:44:39

标签: python return-value getter-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

1 个答案:

答案 0 :(得分:6)

如果你的制定者和吸气者正在进行重要的工作,他们真的不再是制定者或吸气者。虽然代码是正确的,但我建议重命名(一个或两个)函数,以便在使用它们时它们不是简单的getter和setter。类似的东西:

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

除非您出于某种原因绝对需要使用@property@value.setter装饰器。在这种情况下,请务必为您的班级用户明确记录。