1+ # EJERCICIO:
2+ # Explora el patrón de diseño "singleton" y muestra cómo crearlo
3+ # con un ejemplo genérico.
4+
5+ class Singlenton :
6+ _instance = None # Variable de clase para guardar la instancia
7+
8+ def __new__ (cls ):
9+ # Si no existe una instancia se crerara
10+ if cls ._instance is None :
11+ cls ._instance = super ().__new__ (cls )
12+ return cls ._instance # Siempre devolvemos la misma instancia
13+ def __init__ (self , value = None ):
14+ # Solo inicializamos una vez
15+ if not hasattr (self , "initialized" ):
16+ self .initialized = True
17+ self .value = value
18+
19+
20+
21+ # DIFICULTAD EXTRA (opcional):
22+ # Utiliza el patrón de diseño "singleton" para representar una clase que
23+ # haga referencia a la sesión de usuario de una aplicación ficticia.
24+ # La sesión debe permitir asignar un usuario (id, username, nombre y email),
25+ # recuperar los datos del usuario y borrar los datos de la sesión.
26+
27+ class User :
28+ _instance = None
29+
30+
31+ def __new__ (cls ,* args , ** kwargs ):
32+ if cls ._instance is None :
33+ cls ._instance = super ().__new__ (cls )
34+ return cls ._instance
35+
36+ def __init__ (self , id , username , name , mail ):
37+ self .id : int = id
38+ self .username : str = username
39+ self .name : str = name .capitalize ()
40+ self .mail : str = mail
41+ def __str__ (self ):
42+ return f"ID: { self .id } , Username: { self .username } , Nombre: { self .name } , Email: { self .mail } "
43+
44+ def clear_session (self ):
45+ self .id = None
46+ self .username = None
47+ self .name = None
48+ self .mail = None
0 commit comments