将实例追加到列表时,属性setter没有输出



当我发现在所有其他条件相同的情况下,属性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

最新更新