首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单胎级工厂

单胎级工厂
EN

Stack Overflow用户
提问于 2022-07-13 19:22:22
回答 1查看 161关注 0票数 0

要创建Singleton u,可以这样做:

代码语言:javascript
复制
class Klass:

    def __new__(cls, args):
        if not hasattr(cls, 'instance'):
            cls.instance = Blah(args)
        return cls.instance

是否有办法按需创建Singleton类,即:

代码语言:javascript
复制
  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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-14 01:07:16

这是我的解决办法

代码语言:javascript
复制
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  #false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72971573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档