Update Python Ofensivo
This commit is contained in:
parent
8896ac39c2
commit
ab95e6f805
39
python-ofensivo/00_ejercicios/05_encapsulamiento01.py
Normal file
39
python-ofensivo/00_ejercicios/05_encapsulamiento01.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/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
|
31
python-ofensivo/00_ejercicios/05_encapsulamiento02.py
Normal file
31
python-ofensivo/00_ejercicios/05_encapsulamiento02.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Atributo privado
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Coche:
|
||||||
|
|
||||||
|
def __init__(self, marca, modelo):
|
||||||
|
self.marca = marca
|
||||||
|
self.modelo = modelo
|
||||||
|
self.__kilometraje = 0 # Atributo privado
|
||||||
|
|
||||||
|
def conducir(self, km):
|
||||||
|
|
||||||
|
if km >= 0:
|
||||||
|
self.__kilometraje += km
|
||||||
|
else:
|
||||||
|
print("\n[!] Los kilometros deben ser mayores de 0\n")
|
||||||
|
|
||||||
|
def mostrar_kilometraje(self):
|
||||||
|
return self.__kilometraje
|
||||||
|
|
||||||
|
|
||||||
|
coche = Coche("Toyota", "Corolla")
|
||||||
|
coche.conducir(150)
|
||||||
|
|
||||||
|
# Esto no se hace, te matan los desarrolladores
|
||||||
|
print(coche._Coche__kilometraje)
|
||||||
|
|
||||||
|
print(coche.mostrar_kilometraje()) # El convenio especifica que se haga así
|
Loading…
Reference in New Issue
Block a user