下面的代码是我如何用元类实现singleton的,它工作得很好
class Test_MetaClass(type):
def __init__(cls, name, bases, dict):
super(Test_MetaClass, cls).__init__(cls, bases, dict)
cls._instance = None
print 'Test_MetaClass __init__'
def __call__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(Test_MetaClass, cls).__call__(*args, **kwargs)
print 'Test_MetaClass __call__'
return cls._instance
class A(object):
__metaclass__ = Test_MetaClass
def __init__(self):
print 'A __init__ triggered'
a = A()
b = A()
输出:
^{pr2}$我的问题是为什么b = A()
直接转到Test_MetaClass.__call__
而忽略{
这不是你想要的吗?
cls._instance
不是None,因此它不会执行type.__call__(cls, *args, **kwargs)
:正是通过这个调用,}被调用来创建/初始化一个新实例。但对于你的单身汉来说,你只需要一个实例。在
A.__new__
和{相关问题 更多 >
编程相关推荐