Duplicar posible:
private members in pythonsimular variables privadas en Python
Tengo pocas variables que realmente desea ocultar porque no pertenecen fuera de mi clase. Además, todas estas variables no documentadas hacen que la herencia sea inútil.
¿Cómo se ocultan las variables que no desea mostrar fuera de su objeto?
Para aclarar por qué necesito variables privadas, primero un ejemplo donde la incapacidad para ocultar las variables es sólo un inconveniente, y luego otro que es realmente un problema:
class MyObject(object):
def __init__(self, length):
self.length = length
def __len__(self):
return length
item = MyObject(5)
item.length
len(item)
así que tengo dos maneras de acceder 'de largo 'del artículo aquí. Es solo un inconveniente y nada 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()
Así que decir que quiero cambiar la implementación algún día .. Lo más probable es que va a romper algo menos que realmente he enterrado los detalles de implementación.
Lo tomaré como cualquiera podría programar. Ese 'cualquiera' puede encontrar algo útil a partir de mis detalles de implementación y usarlo, ¡incluso si hubiera sido muy desaconsejable hacerlo! Sería mucho más fácil decir: "no, no está allí, prueba otra cosa".
¿Desea que las variables no hereden, correcto? –
Paul: corregir .. – Cheery
Python no hace la esclavitud y la dominación como lo hacen algunos idiomas. Si no puede evitar el uso de '_method' o' _datum' (vea DrDee a continuación), se merece lo que obtiene (o no obtiene (o se rompe)). – msw