40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
"""
|
|||
|
Encapsulamiento y métodos especiales
|
|||
|
|
|||
|
Hay un convenio que se utiliza en Python para indicar que un atributo
|
|||
|
o método es privado o protegido. No se debería usar fuera de la clase.
|
|||
|
Atributo protegido
|
|||
|
self._dinero
|
|||
|
|
|||
|
Atributo privado:
|
|||
|
self.__dinero
|
|||
|
|
|||
|
Esto activa un mecanismo de cambio de nombre conocido como ‘name mangling‘,
|
|||
|
donde el intérprete de Python altera internamente el nombre del atributo
|
|||
|
para hacer más difícil su acceso desde fuera de la clase.
|
|||
|
|
|||
|
Para extraerlo hay que poner el nombre de la clase delante del atributo
|
|||
|
self._Ejemplo__dinero
|
|||
|
|
|||
|
"""
|
|||
|
|
|||
|
|
|||
|
class Ejemplo:
|
|||
|
|
|||
|
def __init__(self):
|
|||
|
|
|||
|
# Atributo protegido
|
|||
|
self._atributo_protegido = "Soy un atributo protegido y no deberías poder verme"
|
|||
|
|
|||
|
# Atributo privado
|
|||
|
|
|||
|
self.__atributo_privado = "Soy un atributo privado, inalcanzable desde fuera de la clase"
|
|||
|
|
|||
|
|
|||
|
ejemplo = Ejemplo()
|
|||
|
|
|||
|
print(ejemplo._atributo_protegido) # Acceso al atributo protegido
|
|||
|
print(ejemplo._Ejemplo__atributo_privado) # Acceso al atributo privado
|
|||
|
print(ejemplo.__atributo_privado) # Error
|