Python属性的行为不符合预期

时间:2014-09-01 06:43:42

标签: python python-2.7 properties

我将在下面的网站上阅读解释和示例:

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

但是我根本没有输出。该程序运行没有错误,但屏幕保持为空。 有什么我做错了吗?

2 个答案:

答案 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):