我通过在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))
答案 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