在线阅读示例时对python装饰的一些困惑

时间:2018-08-02 23:22:24

标签: python python-decorators

在在线阅读有关属性装饰器详细信息的教程时,我感到有些困惑。

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()
    temperature = temperature.getter(get_temperature)
    temperature = temperature.setter(set_temperature)

x = Celsius(99)
print(x.temperature)
x.temperature = 10
print(x.temperature)    

此示例演示了如何用内部实际发生的情况替换语法糖来装饰属性。 我的问题是:  1.示例中有两个“温度”。

self.temperature = temperature #instance attribute 
temperature = property() #class attribute

当我通过调用Celsius(99)实例化该类时,如果我们遵循Python的属性查找顺序,那么仅在初始化器中为实例属性分配值是真的吗?那么如何调用set_temperature并将99分配给self._temperature?

  1. 如何完全实现property.getter()和property.setter()? “温度”是“属性”类型的类属性。那么为什么当我们通过x.temperature访问此属性时,却没有得到“属性”对象,而是调用了get_temperature和set_temperature方法?

0 个答案:

没有答案