2017-02-09 4 views
0

Ich habe eine Python-Eigenschaft wie folgt:Python Eigenschaft mit öffentlichen Getter und Setter privaten

class Foo: 

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

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

Derzeit kann der Wert von maxInputs sein und von allen gesetzt bekommen.

Allerdings möchte ich jedem erlauben, den Wert der maxInputs zu erhalten, aber es sollte nur innerhalb der Foo Klasse festgelegt werden.

Gibt es also eine Möglichkeit, eine Eigenschaft mit einem privaten Setter und einem öffentlichen Getter zu deklarieren?

Antwort

2

Python hat keine Privatsphäre Modell. Die Verwendung von Unterstrichen ist nur eine Konvention, es gibt keine Zugriffskontrolle. Wenn Sie nicht möchten, dass die 'public' API ein sett enthält, dann entfernen Sie einfach den Setter aus Ihrer Klasse und weisen Sie ihn direkt Ihrem Klassencode self._persistentMaxInputs.value zu. Sie können es sich um eine Funktion, wenn Sie die Anzahl der Standorte begrenzen möchten, die sich daran erinnern müssen:

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

Sie können natürlich machen, dass ein separates property Objekt, aber dann würden Sie das verzichten müssen Dekorateur Syntax:

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

aber jetzt zumindest Sie self._maxInputs = value in Ihrer Klasse Code verwenden können. Dies bietet jedoch nicht wirklich eine Verbesserung der Syntax.

Verwandte Themen