【发布时间】:2017-06-13 10:26:23
【问题描述】:
在link 中学习 python 属性装饰器时,我偶然发现了以下代码行:
class Celsius:
def __init__(self, temperature = 0):
self.temperature = temperature
def to_fahrenheit(self):
return (self.temperature * 1.8) + 32
def get_temperature(self):
print("Getting value")
return self._temperature
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value
temperature = property(get_temperature,set_temperature)
这段代码基本上可以让您修改/添加限制到Celsius 对象,而无需任何继承Celsius 类的人重构他们的代码。
为什么它先定义一个类变量temperature,而不是让self.temperature = property(get_temperature,set_temperature)就完成了?
编辑:由于 cmets 中的意见冲突,我现在将代码恢复到原始状态,无论是否有错字,以方便人们之后阅读。
【问题讨论】:
-
应该是
__init__中的'self._tem...'?_temperature一开始没有初始化 -
我记得该属性只适用于新样式类和对象。
-
您提供的上述链接中有错字。您需要根据最后一段代码更新您的代码。在
__init__中应该是self._temperature... -
@Jacky 这不是错字。请注意,使用上面的代码,您可以在没有错误的情况下执行此操作,这很糟糕:
t=Celsius(-500)。通常初始化程序应该使用该属性来获取或设置私有变量,就像任何其他方法一样。 -
@RickTeachey 你是说上面的代码没有正确使用属性方法吗?
标签: python python-2.7 properties