如何在python中使用singleton继承Base类

时间:2016-09-27 11:23:56

标签: python python-2.7

我有基类,它是单例,我需要继承在我的另一个类,但我收到错误消息 TypeError:调用元类库时出错     function()参数1必须是代码,而不是str

有人可以帮忙解决这个问题。 以下是示例代码。

def singleton(cls):
  instances = {}
  def getinstance():
    if cls not in instances:
      instances[cls] = cls()
    return instances[cls]
  return getinstance

@singleton
class ClassOne(object):

  def methodOne(self):
    print "Method One"

  def methodTwo(self):
    print "Method Two"


class ClassTwo(ClassOne):
  pass

1 个答案:

答案 0 :(得分:1)

您必须使singleton成为一个类而不是一个函数才能使派生工作。这是一个已在Python 2.7和3.5上测试过的示例:

class singleton(object):
    instances = {}
    def __new__(cls, clz = None):
        if clz is None:
            # print ("Creating object for", cls)
            if not cls.__name__ in singleton.instances:
                singleton.instances[cls.__name__] = \
                    object.__new__(cls)
            return singleton.instances[cls.__name__]
        # print (cls.__name__, "creating", clz.__name__)
        singleton.instances[clz.__name__] = clz()
        singleton.first = clz
        return type(clz.__name__, (singleton,), dict(clz.__dict__))

如果您在示例类中使用它:

@singleton
class ClassOne(object):

  def methodOne(self):
    print "Method One"

  def methodTwo(self):
    print "Method Two"


class ClassTwo(ClassOne):
  pass

AB都是单身人士

请注意,从单例类继承是不常见的。