为什么在进行赋值时 属性 属性没有被右侧替换?

Why isn't the property attribute being replaced by the right hand side when making assignments?

给出以下 class(来自 https://www.programiz.com/python-programming/property):

# using property class
class Celsius:
    def __init__(self, temperature=0):
        self.temperature = temperature

    def to_fahrenheit(self):
        return (self.temperature * 1.8) + 32

    # getter
    def get_temperature(self):
        print("Getting value...")
        return self._temperature

    # setter
    def set_temperature(self, value):
        print("Setting value...")
        if value < -273.15:
            raise ValueError("Temperature below -273.15 is not possible")
        self._temperature = value

    # creating a property object
    temperature = property(get_temperature, set_temperature)

当我们赋值c.temperature = 100时(cCelsius的一个实例),有谁知道为什么它调用setter函数,而不是替换property 对象(这是原始的 c.temperature),编号为 100?

这就是描述符协议的工作原理。 c.temperature = 100的意义取决于Celsius.temperature是否存在。如果是,并且定义了 Celsius.temperature.__set__,则使用 Celsius.temperature.__set__(c, 100) 而不是直接将值分配给实例属性(例如,c.__dict__['temperature'] = 100)。

property是实现描述符协议的类型。它的 __set__ 方法调用 setter(在您的示例中为 set_temperature)。