1+ class SingletonMeta (type ):
2+
3+ _instances = {}
4+ def __call__ (cls ,* args ,** kwargs ):
5+ if cls not in cls ._instances :
6+ instance = super ().__call__ (* args ,** kwargs )
7+ cls ._instances [cls ] = instance
8+ return cls ._instances [cls ]
9+ def clear (cls ):
10+ cls ._instances .pop (cls )
11+
12+ class Singleton (metaclass = SingletonMeta ):
13+ def syHello (self ):
14+ print ("Hello from Singleton class" )
15+
16+ s1 = Singleton ()
17+ s2 = Singleton ()
18+
19+ if id (s1 ) == id (s2 ):
20+ print ("Both instances have same id" )
21+ else :
22+ print ("Intances are different" )
23+
24+ class User (metaclass = SingletonMeta ):
25+ def __init__ (self ,id ,username ,name ,email ):
26+ self .id = id
27+ self .username = username
28+ self .name = name
29+ self .email = email
30+ def get_name (self ):
31+ return self .name
32+ def get_id (self ):
33+ return self .id
34+ def get_username (self ):
35+ return self .username
36+ def get_email (self ):
37+ return self .email
38+ def close_session (self ):
39+ User .clear ()
40+
41+
42+ user = User (
1 ,
"user1" ,
"Juan" ,
"[email protected] " )
43+ id1 = id (user )
44+ print (f'Id for object: { id1 } ' )
45+ print (f'User Id { user .get_id ()} ' )
46+ print (f'User name { user .get_name ()} ' )
47+ user .close_session ()
48+ user2 = User (
2 ,
"user2" ,
"Luna" ,
"[email protected] " )
49+ id2 = id (user2 )
50+ print (f'Id for object: { id2 } ' )
51+ print (f'User Id { user2 .get_id ()} ' )
52+ print (f'User name { user2 .get_name ()} ' )
53+ user2 .close_session ()
0 commit comments