2017-02-09 1 views
0

J'ai une propriété de python comme ceci:propriété Python avec getter public et privé setter

class Foo: 

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

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

Actuellement, la valeur de maxInputs peut être obtenir et fixé par tout le monde.

Cependant, je veux permettre à tout le monde d'obtenir la valeur du maxInputs, mais elle ne doit être définie qu'à l'intérieur de la classe Foo.

Y a-t-il un moyen de déclarer une propriété avec un setter privé et un getter public?

Répondre

2

Python a aucun modèle de confidentialité. L'utilisation de underscores n'est qu'une convention, il n'y a pas de contrôle d'accès. Si vous ne voulez pas que l'API 'public' inclue un sett, supprimez simplement le setter de votre classe et attribuez-le directement à self._persistentMaxInputs.value dans votre code de classe. Vous pouvez en faire une fonction si vous voulez limiter le nombre d'emplacements qui ont besoin de se rappeler ceci:

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

Vous pouvez bien sûr faire qu'un objet property séparé, mais vous auriez à renoncer à la syntaxe décorateur:

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

mais maintenant au moins vous pouvez utiliser self._maxInputs = value dans votre code de classe. Cependant, cela n'offre pas vraiment beaucoup d'amélioration de la syntaxe.