Skip to content

Commit b44b426

Browse files
authored
#24 - python
1 parent f929f70 commit b44b426

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""
2+
EJERCICIO:
3+
Explora el concepto de "decorador" y muestra cómo crearlo
4+
con un ejemplo genérico.
5+
6+
DIFICULTAD EXTRA (opcional):
7+
Crea un decorador que sea capaz de contabilizar cuántas veces
8+
se ha llamado a una función y aplícalo a una función de tu elección.
9+
"""
10+
from threading import Lock
11+
from random import randint
12+
13+
14+
def decora_string(fun_parametro):
15+
"""
16+
Creo un decorador que adorna funciones que retornan un string de manera aleatorea.
17+
"""
18+
def fun_interna():
19+
ladornos=['・。+☆+。・゚・','○+●+○+●', '+* ゚ ゜゚ *+', '♥。・゚♡゚・。♥。・', '★・・・・・・・★']
20+
i= randint(0,len(ladornos)-1)
21+
a= fun_parametro()
22+
return ladornos[i]+a+ ladornos[i]
23+
return fun_interna
24+
25+
class SingletonMeta(type):
26+
_instancias = {}
27+
_lock: Lock = Lock()
28+
def __call__(cls, *args, **kwargs):
29+
with cls._lock:
30+
if cls not in cls._instancias:
31+
instancia = super().__call__(*args, **kwargs)
32+
cls._instancias[cls]= instancia
33+
return cls._instancias[cls]
34+
35+
class ContadorSingleton(metaclass=SingletonMeta):
36+
valor: int = 0
37+
def get(self):
38+
return self.valor
39+
def incrementar(self):
40+
self.valor+=1
41+
def decrementar(self):
42+
self.valor-=1
43+
44+
45+
def decorador_cuenta(fun_parametro):
46+
def fun_interna(s):
47+
cont=ContadorSingleton()
48+
a=fun_parametro(s)
49+
cont.incrementar()
50+
print("Llamaste a la funcion {} veces.".format(cont.get()) )
51+
return a
52+
return fun_interna
53+
54+
@decora_string
55+
def DameNombre():
56+
return "Juan"
57+
58+
@decora_string
59+
def DameDia():
60+
return "Hoy es Navidad"
61+
62+
@decorador_cuenta
63+
def DuplicaString(s):
64+
return s*2
65+
66+
67+
68+
def main():
69+
print("Hola " + DameNombre())
70+
print(DameDia())
71+
print()
72+
print(DameNombre())
73+
print()
74+
print(DuplicaString("CHAU"))
75+
print(DuplicaString("Nos Vemos!"))
76+
print(DuplicaString("PE"))
77+
78+
79+
if __name__=="__main__":
80+
main()
81+

0 commit comments

Comments
 (0)