本文实例讲述了Python使用metaclass实现Singleton模式的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Singleton( type ):
def __call__( cls , * args, * * kwargs):
print "Singleton call"
if not hasattr ( cls , 'instance' ):
cls .instance = super (Singleton, cls ).__call__( * args, * * kwargs)
return cls .instance
def __new__( cls , name, bases, dct):
print "Singleton new"
return type .__new__( cls , name, bases, dct)
def __init__( cls , name, bases, dct):
print "Singleton init"
super (Singleton, cls ).__init__(name, bases, dct)
class Cache( object ):
__metaclass__ = Singleton
def __new__( cls , * args, * * kwargs):
print "Cache new"
return object .__new__( cls , * args, * * kwargs)
def __init__( cls , * args, * * kwargs):
print "Cache init"
def __call__( cls , * args, * * kwargs):
print "Cache call"
print Cache()
print Cache()
|
输出:
1
2
3
4
5
6
7
8
|
Singleton new
Singleton init
Singleton call
Cache new
Cache init
<__main__.Cache object at 0x01CDB130 >
Singleton call
<__main__.Cache object at 0x01CDB130 >
|
希望本文所述对大家的Python程序设计有所帮助。