From ab95e6f805a1896d975bf2ec76296b07dd62b5d8 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Mon, 25 Dec 2023 10:54:18 +0100 Subject: [PATCH] Update Python Ofensivo --- .../{04_ejemplo_clase01.py => 04_clase01.py} | 0 .../{04_ejemplo_clase02.py => 04_clase02.py} | 0 .../{04_ejemplo_clase03.py => 04_clase03.py} | 0 .../{04_ejemplo_clase04.py => 04_clase04.py} | 0 .../{04_ejemplo_clase05.py => 04_clase05.py} | 0 .../{04_ejemplo_clase06.py => 04_clase06.py} | 0 .../{04_ejemplo_clase07.py => 04_clase07.py} | 0 .../{04_ejemplo_clase08.py => 04_clase08.py} | 0 .../{04_ejemplo_clase09.py => 04_clase09.py} | 0 .../{04_ejemplo_clase10.py => 04_clase10.py} | 0 .../{04_ejemplo_clase11.py => 04_clase11.py} | 0 .../{04_ejemplo_clase12.py => 04_clase12.py} | 0 .../00_ejercicios/05_encapsulamiento01.py | 39 +++++++++++++++++++ .../00_ejercicios/05_encapsulamiento02.py | 31 +++++++++++++++ 14 files changed, 70 insertions(+) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase01.py => 04_clase01.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase02.py => 04_clase02.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase03.py => 04_clase03.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase04.py => 04_clase04.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase05.py => 04_clase05.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase06.py => 04_clase06.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase07.py => 04_clase07.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase08.py => 04_clase08.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase09.py => 04_clase09.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase10.py => 04_clase10.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase11.py => 04_clase11.py} (100%) rename python-ofensivo/00_ejercicios/{04_ejemplo_clase12.py => 04_clase12.py} (100%) create mode 100644 python-ofensivo/00_ejercicios/05_encapsulamiento01.py create mode 100644 python-ofensivo/00_ejercicios/05_encapsulamiento02.py 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í