具有公共 getter 和私有 setter 的 Python 属性

2024-01-05

我有一个像这样的 python 属性:

class Foo:

    @property
    def maxInputs(self):
        return self._persistentMaxInputs.value

    @maxInputs.setter
    def maxInputs(self, value):
        self._persistentMaxInputs.value = value

目前,价值maxInputs每个人都可以获取和设置。

但是,我想让每个人都能感受到它的价值maxInputs,但它只能设置在Foo class.

那么有没有办法用私有 setter 和公共 getter 来声明属性呢?


Python 有无隐私模型。使用下划线只是一种约定,没有访问控制。 如果您不希望“公共”API 包含 sett,那么只需从类中删除 setter 并分配给self._persistentMaxInputs.value直接在你的类代码中。如果您想限制需要记住这一点的位置数量,您可以将其设为一个函数:

def _setMaxInputs(self, value):
    self._persistentMaxInputs.value = value

You can当然,让它成为一个单独的property对象,但是你必须放弃装饰器语法:

def _maxInputs(self, value):
    self._persistentMaxInputs.value = value
_maxInputs = property(None, _maxInputs)

但现在至少你可以使用self._maxInputs = value在你的类代码中。然而,这并没有真正提供那么多的语法改进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有公共 getter 和私有 setter 的 Python 属性 的相关文章