Python 属性 外部定义的对象 class __init__
Python property object defined outside class __init__
我一直在阅读 Python 属性的 Python 教程,但我无法理解这段代码:
# 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)
human = Celsius(37)
print(human.temperature)
print(human.to_fahrenheit())
human.temperature = -300
- 为什么 属性 在 init 之外赋值?
self._temperature
在哪里定义的?
- 即使这两者在代码中的任何地方都没有链接在一起,
self._temperature
又如何链接到 self.temperature
?
- 为什么在
to_fahrenheit
函数中,即使我正在更改 self.temperature
,但更改的是 self._temperature
而不是原来的 temperature
在构造函数中定义?
非常感谢任何帮助,因为这没有任何意义但有效!
您的代码片段说明了 getter and setter methods in Python 的概念。当试图设置 temperature
class 变量(例如 human.temperature = -300
)时,Python 实际上并没有修改 human.temperature
,而是调用 human.set_temperature(-300)
,这,如果没有出现错误,则将 human._temperature
设置为指定值。同样,调用 print(human.temperature)
等同于 print(human.get_temperature())
(在您的代码中尝试这些替换,看看会发生什么)。
此外,_temperature
的 _
前缀表明它是 private variable,即不应在 class 定义和 get_
/ set_
前缀声明函数是 getter / setter.
总之,human.temperature
不保存值,而是根据上下文调用 human.get_temperature()
或 human.set_temperature()
。实际值存储在 human._temperature
中。更详细的解释,我建议阅读上述文章。
我一直在阅读 Python 属性的 Python 教程,但我无法理解这段代码:
# 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)
human = Celsius(37)
print(human.temperature)
print(human.to_fahrenheit())
human.temperature = -300
- 为什么 属性 在 init 之外赋值?
self._temperature
在哪里定义的?- 即使这两者在代码中的任何地方都没有链接在一起,
self._temperature
又如何链接到self.temperature
? - 为什么在
to_fahrenheit
函数中,即使我正在更改self.temperature
,但更改的是self._temperature
而不是原来的temperature
在构造函数中定义?
非常感谢任何帮助,因为这没有任何意义但有效!
您的代码片段说明了 getter and setter methods in Python 的概念。当试图设置 temperature
class 变量(例如 human.temperature = -300
)时,Python 实际上并没有修改 human.temperature
,而是调用 human.set_temperature(-300)
,这,如果没有出现错误,则将 human._temperature
设置为指定值。同样,调用 print(human.temperature)
等同于 print(human.get_temperature())
(在您的代码中尝试这些替换,看看会发生什么)。
此外,_temperature
的 _
前缀表明它是 private variable,即不应在 class 定义和 get_
/ set_
前缀声明函数是 getter / setter.
总之,human.temperature
不保存值,而是根据上下文调用 human.get_temperature()
或 human.set_temperature()
。实际值存储在 human._temperature
中。更详细的解释,我建议阅读上述文章。