【问题标题】:Python Read-Only Properties are writable [duplicate]Python只读属性是可写的[重复]
【发布时间】:2014-10-20 02:08:00
【问题描述】:

我有以下 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 = 'over 9000'

但它为此类开发人员提供了更多控制权(将电压变为只读)。我只是 觉得没有人真正以可以理解的方式解释属性的机制...... -> 虽然我先用谷歌搜索,但我无法理解属性。 无论如何...有点可笑,因为它现在似乎没有任何困难。

干杯
尼米

【问题讨论】:

  • 我在您的代码中没有看到任何将_voltage 指定为只读的内容。如果您想要只读语义,则必须使用 属性,而不是支持变量。
  • 在 Python 中无法做到这一点。 Python 仅适用于同意的成年人。如果您不相信某人不会访问您的私有属性,请不要给他们您的对象。
  • 作为其他cmets的补充,这里的属性是voltage而不是_voltage。
  • 感谢您的评论。我没想到支持变量是他们的。我想我现在明白了。

标签: python syntax properties


【解决方案1】:

这很正常,因为 Python 不是一种束缚与纪律的语言。 'private' 没有真正的等价物,但有时会使用带有两个前导下划线的属性,尽管这些属性是为了避免继承时出现问题。 一个前导下划线只是为了避免在使用 from xx import * 导入时导入它。

【讨论】:

猜你喜欢
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多