我有基类,它是单例,我需要继承在我的另一个类,但我收到错误消息 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
答案 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
班A
和B
都是单身人士
请注意,从单例类继承是不常见的。