我有一个单例基类,我需要在另一个类中继承它,但我收到错误消息: 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
最佳答案
您必须将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
类A
和B
都将是单例
请注意,从单例类继承的情况并不常见。
关于python - 如何在Python中使用单例继承基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723398/