2017-02-09 160 views
0

Python的财产我有一个Python属性是这样的:公共getter和setter方法私人

class Foo: 

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

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

目前,maxInputs值可以得到受到大家的设定。

但是,我想让每个人都可以获得maxInputs的值,但只能在Foo类中设置。

那么有没有办法用private private setter和public getter声明一个属性?

回答

2

Python有没有隐私模型。使用下划线只是一个约定,没有访问控制。 如果您不希望“公共”API包含设置,则只需从班级中移除设置器,然后直接在您的班级代码中指定self._persistentMaxInputs.value。你可以把它的功能,如果你想限制需要记住这个位置数:

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

当然可以使之成为独立的property对象,但你不得不放弃修饰语法:

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

但现在至少您可以在您的课程代码中使用self._maxInputs = value。然而,这并没有提供很多语法改进。