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

Mor*_*goZ 3 python properties getter-setter

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

class Foo:

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

    @maxInputs.setter
    def maxInputs(self, value):
        self._persistentMaxInputs.value = value
Run Code Online (Sandbox Code Playgroud)

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

但是,我希望所有人都可以获取的值maxInputs,但只能在Foo类内部进行设置。

那么,有没有一种方法可以使用私有设置程序和公共获取程序声明属性?

Mar*_*ers 6

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

def _setMaxInputs(self, value):
    self._persistentMaxInputs.value = value
Run Code Online (Sandbox Code Playgroud)

可以当然,作出这样一个独立的property对象,但你不得不放弃使用修饰语法:

def _maxInputs(self, value):
    self._persistentMaxInputs.value = value
_maxInputs = property(None, _maxInputs)
Run Code Online (Sandbox Code Playgroud)

但现在至少您可以self._maxInputs = value在类代码中使用。但是,这实际上并没有提供太多的语法改进。