Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python只读属性是可写的_Python_Syntax_Properties - Fatal编程技术网

Python只读属性是可写的

Python只读属性是可写的,python,syntax,properties,Python,Syntax,Properties,我有以下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._vo

我有以下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.电压='超过9000'

但它为此类的开发人员提供了更多的控制(将电压设置为只读)。我只是 我觉得没有人真正以一种可以理解的方式解释属性的力学。。。 ->虽然我先在谷歌上搜索了一下,但我还是无法理解房产。 无论如何。。。有点可笑,因为它现在似乎没有造成任何困难

干杯

Nimi是正常的,因为Python不是一种束缚和约束语言。 没有真正等同于“private”的属性,但有时会使用带有两个前导下划线的属性,尽管这些属性被嵌入以避免在操作时出现问题。
在使用xx import*import中的
时,前导下划线只是为了避免导入此内容。

我在代码中没有看到任何将
\u voltage
指定为只读的内容。如果想要只读语义,必须使用属性,而不是支持变量。Python仅适用于同意的成年人。如果您不信任某人不访问您的私有属性,请不要将对象提供给他们。作为其他注释的补充,此处的属性是
voltage
not
\u voltage
.Thx,用于注释。我没想到一个支持变量会是他们的。我想我现在明白了区别。文档说明可以使用属性装饰器创建只读变量。我只是想重现结果。有一个只读变量没有什么害处。哦,我想我现在明白了。谢谢你的帮助。