¿Hay alguna forma de hacer que ciertas variables en clases sean "privadas" (o lo que sea realmente self.__var
) pero ser accesibles a otra clase, como amigos en C++, excepto en python? No quiero que se alteren las variables de ninguna clase. Tampoco quiero copiar todo el código y convertirlo para la segunda clase.Clases de "amigo" en python
Respuesta
No, no existe tal opción.
Use nombres que comiencen con guiones bajos individuales y dígales a las otras personas que trabajan en su proyecto que no sean tontos sobre lo que acceden.
No tengo ni idea de lo que estás hablando.
>>> class Foo(object):
... __bar = 42
...
>>> class Quux(object):
... def spam(self):
... print Foo._Foo__bar
...
>>> q = Quux()
>>> q.spam()
42
'Rastreo (llamada más reciente pasado): Archivo "
Pruebe 'dir (Foo)' para ver cómo su versión de Python lo ha destrozado. –
whoops. Está bien, tienes razón. sin embargo, intente: 'clase Foo (objeto): \t def __init __ (self): \t self .__ bar = 42' – calccrypto
La filosofía de Python es que cuestiones como el control de acceso dependen de la disciplina del programador. No intenta codificar en el idioma qué partes del programa son detalles de implementación interna y cuáles forman parte de la interfaz documentada. Por lo tanto, no necesita construcciones como friend
para tratar de declarar qué otras partes del programa son parte de la implementación de una clase y cuáles son simplemente clientes.
La idea es que si no puede escribir/diseñar/documentar/usar un buen código sin codificar parcialmente estos conceptos en su programa, probablemente tampoco pueda hacerlo cuando los esté codificando. Por lo tanto, es mejor no tener dichos constructos en el idioma, ya que no aumentan el poder expresivo del idioma y ocasionalmente se interponen en el camino.
- 1. clases amigo recursivas
- 2. ¿Un amigo ve las clases base?
- 3. Representando una relación de amigo entre clases en UML
- 4. Modelando relaciones de amigo de amigo en MongoDB
- 5. Clases estáticas en Python
- 6. clases de decorador en Python
- 7. Clases de parches en Python
- 8. decoradores de Python en clases
- 9. Clase de amigo sin usar en C++
- 10. Python ... clases de prueba?
- 11. función de amigo en php?
- 12. Funciones de amigo en C++
- 13. Visualizar el gráfico de Amigo de un amigo (foaf)
- 14. Plantilla amigo
- 15. Registro entre clases en python
- 16. Tipos y clases en Python
- 17. Extendiendo clases incorporadas en python
- 18. ADL y amigo inyección
- 19. Amigo de la plantilla
- 20. Eliminación de clases de Python 3 en Python 2
- 21. atributos "Caching" de clases en Python
- 22. Múltiples clases en un módulo de Python
- 23. Ampliación de clases base en Python
- 24. declaración adelantada de clases en Python
- 25. Creación dinámica de clases - Python
- 26. ¿El "amigo" de una clase se extiende a las clases declaradas dentro de esa clase?
- 27. Interacción de espacio de nombres y amigo en C++?
- 28. Parámetro de plantilla como amigo
- 29. PHP equivalente de amigo o interno
- 30. Decoradores vs. clases en desarrollo web python
El doble prefijo subrayado no tiene nada que ver con "privacidad". El cambio de nombre es para evitar colisiones de nombres de vars de instancia interna en subclases, no para evitar el acceso. – detly