要创建Singleton u,可以这样做:
class Klass:
def __new__(cls, args):
if not hasattr(cls, 'instance'):
cls.instance = Blah(args)
return cls.instance是否有办法按需创建Singleton类,即:
SingletonFactory('Klass1')
obj11 = Klass1(args)
obj12 = Klass1(args)
#obj11 == obj12 ==> true
SingletonFactory('Klass2')
obj21 = Klass2(args)
obj22 = Klass2(args)
#obj21 == obj22 ==> true
#obj11 == obj22 ==> false底层类仍然是Blah。
发布于 2022-07-14 01:07:16
这是我的解决办法
def singleton(new_klass, klass):
def new(cls, *args, **kvargs):
if not hasattr(cls, 'instance'):
cls.instance = klass(*args, **kvargs)
return cls.instance
globals()[new_klass] = type(new_klass, (object,), {'__new__' : new})
#return type(new_klass, (object,), {'__new__' : new})
singleton('C1',Blah)
c1 = C1(10,10)
c2 = C1(10,10)
c1 == c2 #true
singleton('C2',Blah)
c3 = C2(10,10)
c1 == c3 #falsehttps://stackoverflow.com/questions/72971573
复制相似问题