我将在下面的网站上阅读解释和示例:
http://www.programiz.com/python-programming/property
当我尝试它时,似乎代码的行为并不像预期的那样。所以我尝试做的是执行以下操作:
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)
c = Celsius()
我希望输出符合上述网站的描述:
Setting value #That means that "set_temperature" was called by the constructor when the object is being created
但是我根本没有输出。该程序运行没有错误,但屏幕保持为空。 有什么我做错了吗?
答案 0 :(得分:3)
属性仅适用于新式类。您的Celsius
课程需要继承object
。
另请注意,将属性作为装饰器编写这些日子更为惯用:
class Celsius(object):
def __init__(self, temperature = 0):
self.temperature = temperature
def to_fahrenheit(self):
return (self.temperature * 1.8) + 32
@property
def temperature(self):
print("Getting value")
return self._temperature
@temperature.setter
def set_temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value
答案 1 :(得分:1)
默认情况下,Python 2.7仍然使用“旧式类”。如果您使用以下内容创建新样式类,则该示例有效
class Celsius(object):