在在线阅读有关属性装饰器详细信息的教程时,我感到有些困惑。
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?