【发布时间】:2020-07-15 17:16:56
【问题描述】:
给定以下课程(来自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(c 是Celsius 的一个实例)时,有谁知道它为什么调用setter 函数,而不是将property 对象(即原来的c.temperature)替换为一个号码100?
【问题讨论】:
-
因为这是属性对象的全部意义...覆盖赋值运算符,对吧?
-
因为它们是描述符。请参阅Descriptor HowTo Guide。
-
你最后的声明实际上在做什么?