simular variables privadas en python

Posible duplicado:
miembros privados en python

Tengo pocas variables que realmente quiero ocultar porque no pertenecen a mi clase. Además, todas estas variables no documentadas inutilizan la herencia.

¿Cómo ocultas las variables que no quieres mostrar fuera de tu objeto?

Para aclarar por qué necesito variables privadas, primero un ejemplo donde la incapacidad para ocultar variables es solo un inconveniente, luego otro 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 formas de acceder a ‘longitud’ 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() 

Entonces, digamos que quiero cambiar la implementación algún día … Lo más probable es que se rompa algo a menos que realmente haya enterrado los detalles de la implementación.

Lo tomaré como cualquiera pueda progtwigr. Ese “cualquier persona” puede encontrar una cosa útil a partir de los detalles de mi implementación y usarla, ¡incluso si me hubiera desanimado enfáticamente a hacerlo! Sería mucho más fácil simplemente decir: “no, no está ahí, intente algo más”.

Las variables privadas se tratan en la documentación de Python:

9.6. Variables privadas

Las variables de instancia “privadas” a las que no se puede acceder, excepto desde dentro de un objeto, no existen en Python. Sin embargo, hay una convención seguida por la mayoría del código de Python: un nombre con un guión bajo (p. Ej. _Spam) debe tratarse como una parte no pública de la API (ya sea una función, un método o un miembro de datos) . Debe considerarse un detalle de implementación y sujeto a cambios sin previo aviso.

Resumen: use un guión bajo antes del nombre.

De los documentos de Python :

Las variables de instancia “privadas” a las que no se puede acceder, excepto desde dentro de un objeto, no existen en Python. Sin embargo, hay una convención seguida por la mayoría del código de Python: un nombre con un guión bajo (p. Ej. _Spam) debe tratarse como una parte no pública de la API (ya sea una función, un método o un miembro de datos) . Debe considerarse un detalle de implementación y sujeto a cambios sin previo aviso.