Python 如何实现单例模式?其他23 种设计模式python 如何实现?
参考答案:【答案】Python 有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模式:
1??
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args,**kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
.
.
__metaclass__ = Singleton
print MyClass()
print MyClass()
2?? 使用decorator 来实现单例模式
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
【解析】
1??
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args,**kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
.
.
__metaclass__ = Singleton
print MyClass()
print MyClass()
2?? 使用decorator 来实现单例模式
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
【解析】
继续答题:下一题

