首页 > 编程语言 > 详细

【Python】单例模式Singleton

时间:2017-02-23 12:17:21      阅读:153      评论:0      收藏:0      [点我收藏+]

前两天一个面试被问到python中单例模式有几种实现方式,只答出了可以用元类实现。。。然后就想不起来了。

之后翻书,原来这些之前都见过的啊。。。。

1.手动实现真正创建实例的方法__new__()来实现

 1 class Singleton(object):
 2     _instance = None
 3 
 4     def __new__(cls, *args, **kwargs):
 5         if not cls._instance:
 6             cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
 7         return cls._instance
 8 
 9 if __name__ == __main__:
10     s1 = Singleton()
11     s2 = Singleton()
12     assert id(s1) == id(s2)

2,利用元类实现:

 1 class Singleton(type):
 2     def __init__(cls, name, bases, dic):
 3         super(Singleton, cls).__init__(name, bases, dic)
 4         cls.instance = None
 5 
 6     def __call__(cls, *args, **kwargs):
 7         if cls.instance is None:
 8             cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
 9         return cls.instance
10 
11 
12 class MySingleton(object):
13     __metaclass__ = Singleton

3,利用装饰器实现

 

 1 def Singleton1(aclass):
 2     instance = None
 3     def oncall(*args):
 4         nonlocal instance
 5         if instance == None
 6             instance = aclass(*args)
 7         return instance
 8     return oncall
 9 
10 
11 class singleton2:
12     def __init__(self, aclass):
13         self.aclass = aclass
14         self.instance = None
15         
16     def __call__(self, *args):
17         if self.instance == None:
18             self.instance = self.aclass(*args)
19         return self.instance

 参考资料:1.改善python程序的91个建议

      2.Python学习手册

【Python】单例模式Singleton

原文:http://www.cnblogs.com/fcyworld/p/6432300.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!