I was making a Singleton design pattern and everything goes fine.
Look at the code below:
class Singleton():
def __new__(cls):
if not hasattr(cls, 'instance'):
cls.instance = super().__new__(cls)
return cls.instance
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)
# True
But this is not Singleton because user can use delattr(Singleton,'instance')
between creating s1
and s2
and with this simple function s1 is s2
returns False
So I decided to change instance
to __instance
(to stop user using delattr(Singleton,'instance')
) but when I do that I get False when printing s1 is s2
(My new code (__instance))
class Singleton():
def __new__(cls):
if not hasattr(cls, '__instance'):
cls.__instance = super().__new__(cls)
return cls.__instance
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)
# False
But where is the problem? Why when I change instance
to __instance
the result I get is False?
(I know other methods of creating Singleton I Just want to know what is different in instance
and __instance
when I'm in the class and __instance
is not private for myself)
Aucun commentaire:
Enregistrer un commentaire