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