2017-02-09 4 views
0

У меня есть питон свойство как это:Python собственности с общественным геттер и сеттер частного

class Foo: 

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

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

В настоящее время стоимость maxInputs может быть получить и установить все.

Однако я хочу, чтобы все получили значение maxInputs, но его следует устанавливать только внутри класса Foo.

Так есть способ объявить собственность частным сеттером и публичным получателем?

ответ

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 в своем классе кода. Однако это не означает, что большая часть улучшения синтаксиса.

Смежные вопросы