当我发现在所有其他条件相同的情况下,属性setter中的print语句并不总是完成它的工作时,我正在尝试属性装饰器。在下面的例子中,我从直接初始化的类实例(fiver
部分(获得预期的输出,但在将实例附加到列表(objlist
部分(时没有。Python 3.5.3
class Celsius:
def __init__(self,temperature=0):
self._temperature=temperature
@property
def temperature(self):
print("Getting value...")
return self._temperature
@temperature.setter
def temperature(self, value):
print("Guess, you know what you're doing...")
if value < -273:
print ("Impossible temperature...")
self._temperature = -273
else:
self._temperature = value
objlist=[]
objlist.append(Celsius(4))
objlist.append(Celsius(-499))
fiver=Celsius(5)
print (fiver.temperature)
fiver.temperature=-408
print (fiver.temperature)
在__init__
中,您可以设置"内部">值CCD_ 4。此不会调用setter
,因为property.setter
是在temperature
上定义的。
如果你想让__init__
也通过setter
验证,听起来很有趣,只需使用setter
:
def __init__(self,temperature=0):
self.temperature = temperature