Skip to content

Commit 9345b34

Browse files
authored
Merge pull request #4195 from Trufoplus/main
#23 - Python
2 parents 448c6fa + e8d02c1 commit 9345b34

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
###############################################################################
2+
### EJERCICIO
3+
###############################################################################
4+
5+
# creamos un decorador singleton para nuestra clase.
6+
# crear este decorador nos permitira reutilizarlo sin volver a escribir
7+
def singleton(cls):
8+
"""
9+
Decorador singleton que nos asegurara tener solo una instancia de una clase
10+
para aquella clases decoradas
11+
"""
12+
__instances = dict()
13+
14+
def wrap(*args, **kwargs):
15+
if cls not in __instances:
16+
__instances[cls] = cls(*args, **kwargs)
17+
18+
return __instances[cls]
19+
20+
return wrap
21+
22+
@singleton
23+
class User():
24+
def __init__(self, username):
25+
self.username = username
26+
def __str__(self):
27+
return self.username
28+
29+
@singleton
30+
class Admin():
31+
def __init__(self, username):
32+
self.username = username
33+
def __str__(self):
34+
return f'{self.username}(Admin)'
35+
36+
37+
# Creamos la primera instancia
38+
instance_1 = User('Pepe Grillo')
39+
print(f'Usuario = {instance_1}')
40+
# La segunda instancia no se crea pues ya hay una creada
41+
instance_2 = User('Naruto')
42+
print(f'Usuario = {instance_1}, Usuario 2 = {instance_2}')
43+
44+
45+
admin_1 = Admin('Vegeta')
46+
admin_2 = Admin('Goku')
47+
print(f'admin_1 = {admin_1}, admin_2 = {admin_2}')
48+
49+
50+
###############################################################################
51+
### DIFICULTAD EXTRA
52+
###############################################################################
53+
print('\nDificutad Extra:\n')
54+
55+
56+
class Session:
57+
__instances = dict()
58+
59+
def __new__(cls, *args, **kwargs):
60+
"""
61+
Garantiza que solo se crea una instancia de la clase
62+
"""
63+
if cls not in cls.__instances:
64+
cls.__instances[cls] = super().__new__(cls)
65+
66+
return cls.__instances[cls]
67+
68+
69+
def __init__(self, id, username, name, email):
70+
self.user_data = {
71+
'id': id,
72+
'username': username,
73+
'name': name,
74+
'email': email
75+
}
76+
77+
78+
def __str__(self):
79+
"""
80+
Imprime informacion del usuario
81+
"""
82+
if self.user_data:
83+
return f"id:{self.user_data['id']}\nusername:{self.user_data['username']}\nname:{self.user_data['name']}\nemail:{self.user_data['email']}"
84+
else:
85+
return "Datos de usuario vacio."
86+
87+
88+
def delete_session(self):
89+
"""
90+
borra los datos del usuario y elimina la instancia
91+
"""
92+
self.user_data = {}
93+
del Session.__instances[self.__class__]
94+
95+
96+
def __del__(self):
97+
"""
98+
Impremie mensaje despues de eliminar un objeto
99+
"""
100+
print('Las sesion a sido eliminada')
101+
102+
103+
104+
# Creamos instancia con los datos de usuario
105+
session_1 = Session(2, 'vegetta777', 'fran', '[email protected]')
106+
107+
# Obtenemos los datos del usuario
108+
print("Datos del usuario:")
109+
print(session_1)
110+
111+
# Borramos los datos del usuario
112+
session_1.delete_session()
113+
114+
# Intentamos acceder a los datos del usuario
115+
print("\nDespués de borrar la sesión:")
116+
print(session_1)
117+

0 commit comments

Comments
 (0)