Possible en double:
private members in pythonsimulent des variables privées en python
J'ai quelques variables que je veux vraiment cacher parce qu'ils ne sont pas en dehors de ma classe. De plus, toutes ces variables non documentées rendent l'héritage inutile.
Comment cacher ces variables que vous ne voulez pas montrer en dehors de votre objet?
Pour expliquer pourquoi j'ai besoin des variables privées, d'abord un exemple où l'incapacité de cacher les variables est juste un inconvénient, puis une autre qui est vraiment un problème:
class MyObject(object):
def __init__(self, length):
self.length = length
def __len__(self):
return length
item = MyObject(5)
item.length
len(item)
J'ai deux façons d'accès « longueur 'de l'article ici. C'est seulement un inconvénient et rien d'horrible.
from wares import ImplementationSpecific
class MyThing(object):
def __init__(self):
self.__no_access_even_if_useful = ImplementationSpecific()
def restricted_access(self):
return self.__no_access_even_if_useful.mutable_value
thing = MyThing()
thing.restricted_access()
thing._MyThing__no_access_even_if_useful.something_useful_for_someone()
Alors que je veux changer la mise en œuvre un jour .. Les chances sont que ça va casser quelque chose à moins que je suis vraiment enterré les détails de mise en œuvre.
Je vais le prendre comme n'importe qui pourrait programmer. Ce «n'importe qui» peut trouver une chose utile à partir de mes spécificités d'implémentation et l'utiliser, même si je me serais fortement découragé de le faire! Il serait beaucoup plus facile de simplement dire: "Non, ce n'est pas là, essayez autre chose."
Vous voulez que les variables ne héritent pas, correct? –
Paul: correct .. – Cheery
Python ne fait pas de servitude et de domination comme le font certaines langues. Si vous ne pouvez pas vous empêcher d'utiliser '_method' ou' _datum' (voir DrDee ci-dessous), vous méritez ce que vous obtenez (ou n'obtenez pas (ou ne cassez pas)). – msw