首页 > 编程语言 > 详细

python基础--新式类实现单例模式

时间:2019-11-03 13:13:21      阅读:58      评论:0      收藏:0      [点我收藏+]

在网上看了有关python实现单例模式的博客,发现好多都是转载的,并且都是按照python2.x版本旧式类的方式写的。

虽然也能读懂,但对于我这种一开始学的就是python3.x的新手来说,心里总有点别扭。

所以今天我就把搜集来的单例模式稍加修改一下,以新式类的方式写下来。

1.在写代码之前,先理解一个概念,那就是元类metaclass,

  具体参考这篇文章:https://www.cnblogs.com/tkqasn/p/6524879.html

  我自己对于元类的理解,简单来说,就是元类是类的类,也就是说元类是用来创建类的

  所以下面会用到__metaclass__创建类来实现单例

2.下面是不同方法实现单例的代码

  方法一:通过__new__方法实现单例

 1 class Singleton:
 2     def __new__(cls,*args,**kwargs):
 3         if not hasattr(cls, _instance):
 4             cls._instance = super().__new__(cls,*args,**kwargs)
 5         return cls._instance
 6 
 7 class MyClass:
 8     __metaclass__ = Singleton
 9    
10 print(MyClass())
11 print(MyClass())

  方法二:通过元类实现单例

 1 class Singleton:
 2     def __init__(cls,*args, **kwargs):
 3         super().__init__(*args, **kwargs)
 4         cls.instance = None
 5     def __call__(cls, *args, **kwargs):
 6         if cls.instance is None:
 7             cls.instance = super().__call__(*args, **kwargs)
 8         return cls.instance
 9 
10 class MyClass:
11     __mettaclass__ = Singleton
12 
13 print(MyClass())
14 print(MyClass())

  方法三:通过decorator装饰器实现单例

 1 def singleton(cls, *args, **kwargs):
 2     instances = {}
 3     def get_instance():
 4         if cls not in instances:
 5             instances[cls] = cls(*args, **kwargs)
 6         return instances[cls]
 7     return get_instance
 8 
 9 @singleton
10 class MyClass:
11     __mettaclass__ = singleton
12 
13 print(MyClass())
14 print(MyClass())

  方法四:通过导入模块实现单例

1 #  file1/mysingleton.py
2 
3 
4 class Singleton:
5     def foo(self):
6         pass
7 
8 singleton = Singleton()

  注意:以上代码为一个单独模块,使用时直接导入即可。

1 form mysingleton import singleton
2 
3 a = singleton
4 b = singleton
5 
6 print(a)
7 pring(b)
8 print(a is b)

 

python基础--新式类实现单例模式

原文:https://www.cnblogs.com/jeffrey04118110/p/11785663.html

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