Python3.7 singleton is not unique anymore
Eko palypse
ekopalypse at gmail.com
Tue Sep 17 12:45:51 EDT 2019
Using the following code in Python3.7 doesn't make FOO to be singleton anymore.
import sys
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
if sys.version_info.major == 2:
class FOO():
__metaclass__ = Singleton
def __init__(self):
self.id = None
def setid(self, id):
self.id = id
def getid(self):
return self.id
else:
class FOO():
def __init__(self, metaclass=Singleton):
self.id = None
def setid(self, id):
self.id = id
def getid(self):
return self.id
x1 = FOO()
x1.setid(1)
x2 = FOO()
x2.setid(2)
x = x1
y = FOO()
print(x1, x1.id)
print(x2, x2.id)
print(x, x.id)
print(y, y.id)
python2 results in something like
<__main__.FOO object at 0x0000000007D9C978>, 2
<__main__.FOO object at 0x0000000007D9C978>, 2
<__main__.FOO object at 0x0000000007D9C978>, 2
<__main__.FOO object at 0x0000000007D9C978>, 2
whereas python3.7 result in
<__main__.FOO object at 0x00000000072C2EB8> 1
<__main__.FOO object at 0x0000000007357080> 2
<__main__.FOO object at 0x00000000072C2EB8> 1
<__main__.FOO object at 0x00000000072C2160> None
What did I miss?
Thank you
Eren
More information about the Python-list
mailing list