博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 实现单例模式
阅读量:6076 次
发布时间:2019-06-20

本文共 1078 字,大约阅读时间需要 3 分钟。

Python 实现单例模式

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 使用Python实现单例模式
 
# 方法一: 使用__new__方法
class 
SingleTon(
object
):
    
def 
__new__(
cls
*
args, 
*
*
kwargs):
        
if 
not 
hasattr
(
cls
'_instance'
):
            
cls
._instance 
= 
object
.__new__(
cls
*
args, 
*
*
kwargs)
        
return 
cls
._instance
 
 
class 
TestClass(SingleTon):
    
= 
1
 
 
# 方法二: 使用装饰器(decorator)
def 
SingleTon1(
cls
*
args, 
*
*
kwargs):
    
instances 
= 
{}
    
def 
_singleTon():
        
if 
cls 
not 
in 
instances:
            
instances[
cls
= 
cls
(
*
args, 
*
*
kwargs)
        
return  
instances[
cls
]
    
return 
_singleTon
 
 
@SingleTon1
class 
TestClass1(
object
):
    
= 
1
 
 
 
# 共享属性  属性是共享的,但是并非单例模式
class 
SingleTon3(
object
):
    
_state 
= 
{}
    
def 
__new__(
cls
*
args, 
*
*
kwargs):
        
obj 
= 
object
.__new__(
cls
*
args, 
*
*
kwargs)
        
obj.__dict__ 
= 
cls
._state
        
return 
obj
 
 
class 
TestClass3(SingleTon3):
    
= 
1
 
test1 
= 
TestClass3()
test2 
= 
TestClass3()
test1.a 
= 
2
print
(test1.a)
print
(test2.a)
print
(test1)
print
(test2)
本文转自 许大树 51CTO博客,原文链接:http://blog.51cto.com/abelxu/1967293,如需转载请自行联系原作者
你可能感兴趣的文章
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>
lintcode:next permutation下一个排列
查看>>
一个想法(续二):换个角度思考如何解决IT企业招聘难的问题!
查看>>
tomcat指定配置文件路径方法
查看>>
linux下查看各硬件型号
查看>>
对象合成复用之策略模式
查看>>
epoll的lt和et模式的实验
查看>>