Skip to content

Commit 5ffea7f

Browse files
committed
feat: #24-Python
Reto #24-Python realizado por mrodara
1 parent c58eef8 commit 5ffea7f

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#### PATRONES DE DISEÑO: DECORADORES
2+
3+
'''
4+
El Patrón Decorador es un patrón estructural que permite añadir funcionalidades a un objeto dinámicamente sin modificar su estructura original.
5+
Es especialmente útil cuando necesitas extender las capacidades de una clase de manera flexible y reutilizable.
6+
7+
En Python, este concepto también está integrado en el lenguaje a través de la sintaxis de decoradores,
8+
que simplifica el uso del patrón.
9+
'''
10+
11+
# Ejemplo básico con una función decoradora
12+
def decorador(funcion):
13+
def wrapper(*args, **kwargs):
14+
print("Antes de ejecutar la función")
15+
result = funcion(*args, **kwargs)
16+
print("Después de ejecutar la función")
17+
18+
return result
19+
20+
return wrapper
21+
22+
@decorador
23+
def saludo(name):
24+
print(f'Hola {name}, estás siendo saludado desde un decorador')
25+
26+
saludo("Manuel")
27+
28+
# En lugar de funciones también se pueden usar decoradores con Clases
29+
class DecoradorClase():
30+
def __init__(self, function):
31+
self.function = function
32+
33+
def __call__(self, *args, **kwargs):
34+
print("Antes de ejecutar la función")
35+
result = self.function(*args, **kwargs)
36+
print("Después de ejecutar la función")
37+
38+
return result
39+
40+
@DecoradorClase
41+
def saludo(name: str):
42+
print(f'Hola {name}, ahora el decorador es de clase')
43+
44+
saludo("Otra vez Manuel")
45+
46+
### EJERCICIO EXTRA
47+
class DecoradorContador():
48+
49+
count = 0
50+
51+
def __init__(self, function):
52+
self.function = function
53+
54+
def __call__(self, *args, **kwds):
55+
result = self.function(*args, **kwds)
56+
self.count += 1
57+
print(f'La función se ha ejecutado {self.count} veces')
58+
return result
59+
60+
@DecoradorContador
61+
def saludo(name: str):
62+
print(f'Hola {name}')
63+
64+
names = ['Antonio', 'Rita', 'Gabriel']
65+
66+
for name in names:
67+
saludo(name)
68+
69+
70+
### FIN EJERCICIO EXTRA
71+
#### FIN PATRONES DE DISEÑO: DECORADORES

0 commit comments

Comments
 (0)