Python只读属性可写
我有一段Python代码。我就是无法让实例变量变成只读的。希望能得到帮助。
class Parrot(object):
def __init__(self):
self._voltage = '100000'
@property
def voltage(self):
"""Get the current voltage."""
return self._voltage
a = Parrot()
print(a._voltage)
a._voltage = '500000'
print(a._voltage)
补充:
这个问题的重点是想明白,如何用属性来替代旧的变量。大家总是说Python是成熟的语言,我们有责任不使用“私有”变量,因为在Python中它们是可见的。但没有人提到其实你可以把旧变量在这种情况下
voltage
变成私有
_voltage
并用属性来替代旧变量(电压)
@property
def voltage(self):
这样就能保持这个类中访问属性的方式不变,使用这个类的人就不需要修改他们的代码。
—— 就像访问变量的方式一样,因为你仍然可以像访问变量那样访问这个属性——例如:
a.voltage = '超过9000'
但这给了这个类的开发者更多的控制权(把电压变成只读)。我只是觉得没有人真正用通俗易懂的方式解释属性的机制……> 尽管我先在网上查过,但还是没能理解属性。
总之……有点可笑,因为现在看起来似乎没有什么困难。
祝好
Nimi
1 个回答
2
这很正常,因为Python并不是一种“严格控制”的语言。它没有真正等同于“私有”的概念,不过有时候会用两个下划线开头的属性来表示,但这主要是为了避免在继承时出现问题。一个下划线开头的属性只是为了避免在使用 from xx import *
这种方式导入时被引入。