|
| 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