本文实例讲述了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程序设计有所帮助。