Eventuali duplicati:
private members in pythonsimulare le variabili private in python
Ho alcune variabili voglio davvero nascondere, perché non appartengono al di fuori la mia classe. Inoltre tutte queste variabili non documentate rendono l'ereditarietà inutile.
Come si nascondono tali variabili che non si desidera mostrare all'esterno del proprio oggetto?
Per chiarire il motivo per cui ho bisogno di variabili private, primo esempio in cui l'incapacità di nascondere le variabili è solo un inconveniente, poi un altro che è davvero un problema:
class MyObject(object):
def __init__(self, length):
self.length = length
def __len__(self):
return length
item = MyObject(5)
item.length
len(item)
Così ho due modi per accedere 'lunghezza 'dell'articolo qui. È solo un inconveniente e niente di orribile.
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()
Quindi dire che voglio cambiare l'implementazione qualche giorno .. Le probabilità sono che sarà rompere qualcosa a meno che non ho davvero sepolto le specifiche di implementazione.
Lo prenderò come chiunque potrebbe programmare. Quel "chiunque" può trovare una cosa utile dalle mie specifiche di implementazione e usarla, anche se mi dispiacerebbe fortemente di farlo! Sarebbe molto più facile dire semplicemente: "no, non c'è, prova qualcos'altro".
Si desidera che le variabili non ereditino, correggere? –
Paul: corretto .. – Cheery
Python non esegue bondage e dominazione come fanno alcune lingue. Se non riesci a smettere di usare '_method' o' _datum' (vedi DrDee sotto) ti meriti quello che ottieni (o non ottieni (o interrompi)). – msw