在__init__中应用属性设置器逻辑

时间:2018-11-20 13:14:09

标签: python class properties setter

我通过在python中设置属性并获取最大递归深度错误来阅读answer

设置属性时,如何以及在何处检查和测试值?我知道我可以在setter中进行检查,但是在课程的__init__()中进行检查是否很好?如果我在__init__()中进行了检查,则我的setter__init__重复了代码。

我的代码示例:

class RealNumber:

    def __init__(self, real):
        self._real = real  # NEED TO TEST IT BEFORE ASSIGNMENT
                           # TEST IS SAME AS IN SETTER

    @property
    def real(self):
        return self._real

    @real.setter
    def real(self, value):
        if isinstance(value, int):
            self._real = value
        else:
            raise ValueError('Can not set real part with value {}'.format(value))

1 个答案:

答案 0 :(得分:2)

您只需在self.real = real中发出__init__。属性设置器已经生效。

class RealNumber:
    def __init__(self, real):
        self.real = real

    @property
    def real(self):
        return self._real

    @real.setter
    def real(self, value):
        if isinstance(value, int):
            self._real = value
        else:
            raise ValueError('Can not set real part with value {}'.format(value))


r = RealNumber(3)
print(r._real)
print(r.real)
print(vars(r))

try:
    RealNumber('bogus')
except ValueError:
    print('error as expected')

输出:

3
3
{'_real': 3}
error as expected