diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase01.py b/python-ofensivo/00_ejercicios/04_clase01.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase01.py rename to python-ofensivo/00_ejercicios/04_clase01.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase02.py b/python-ofensivo/00_ejercicios/04_clase02.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase02.py rename to python-ofensivo/00_ejercicios/04_clase02.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase03.py b/python-ofensivo/00_ejercicios/04_clase03.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase03.py rename to python-ofensivo/00_ejercicios/04_clase03.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase04.py b/python-ofensivo/00_ejercicios/04_clase04.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase04.py rename to python-ofensivo/00_ejercicios/04_clase04.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase05.py b/python-ofensivo/00_ejercicios/04_clase05.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase05.py rename to python-ofensivo/00_ejercicios/04_clase05.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase06.py b/python-ofensivo/00_ejercicios/04_clase06.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase06.py rename to python-ofensivo/00_ejercicios/04_clase06.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase07.py b/python-ofensivo/00_ejercicios/04_clase07.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase07.py rename to python-ofensivo/00_ejercicios/04_clase07.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase08.py b/python-ofensivo/00_ejercicios/04_clase08.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase08.py rename to python-ofensivo/00_ejercicios/04_clase08.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase09.py b/python-ofensivo/00_ejercicios/04_clase09.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase09.py rename to python-ofensivo/00_ejercicios/04_clase09.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase10.py b/python-ofensivo/00_ejercicios/04_clase10.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase10.py rename to python-ofensivo/00_ejercicios/04_clase10.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase11.py b/python-ofensivo/00_ejercicios/04_clase11.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase11.py rename to python-ofensivo/00_ejercicios/04_clase11.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase12.py b/python-ofensivo/00_ejercicios/04_clase12.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase12.py rename to python-ofensivo/00_ejercicios/04_clase12.py diff --git a/python-ofensivo/00_ejercicios/05_encapsulamiento01.py b/python-ofensivo/00_ejercicios/05_encapsulamiento01.py new file mode 100644 index 0000000..eb8dba6 --- /dev/null +++ b/python-ofensivo/00_ejercicios/05_encapsulamiento01.py @@ -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 diff --git a/python-ofensivo/00_ejercicios/05_encapsulamiento02.py b/python-ofensivo/00_ejercicios/05_encapsulamiento02.py new file mode 100644 index 0000000..fc702d7 --- /dev/null +++ b/python-ofensivo/00_ejercicios/05_encapsulamiento02.py @@ -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í