废话就不多说了,开始。。。
元类是类的模版,在类的层次上标准类的行为。
面下用使元类现实单例设计模式(设计模式九 采取的是另一种方法):
from warnings import *
每日一道理
坚持的昨天叫立足,坚持的今天叫进取,坚持的明天叫成功。
class SingletonMeta(type):
__instance=None
__mutex=threading.Lock()
def __init__(cls,name,bases,dic):
super(SingletonMeta,cls).__init__(name,bases,dic)
cls.__instance = None
if '__str__' not in dic :
#raise TypeError("class requires overriding of __str__()")
warn("class '%s ' requires overriding of __str__()\n"%name,stacklevel=3)
def __call__(cls,*args,**kwargs):
if cls.__instance is None:
cls.__mutex.acquire()
if cls.__instance is None:
cls.__instance = super(SingletonMeta,cls).__call__(*args,**kwargs)
else:
cls.__instance.__init__(*args,**kwargs)