-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsingleton.py
More file actions
35 lines (29 loc) · 756 Bytes
/
singleton.py
File metadata and controls
35 lines (29 loc) · 756 Bytes
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
#!-*- coding:utf-8 -*-
# 使用原类
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls._instance = None
def __call__(cls, *args):
if cls._instance is None:
cls._instance = super(Singleton, cls).__call__(*args)
return cls._instance
class Base():
__metaclass__ = Singleton
m1 = Base()
m2 = Base()
print id(m1) == id(m2)
# 装饰器方法实现
def singleton(cls, *args, **kw):
instances = {}
def _singleton():
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return _singleton
@singleton
class Base():
pass
m1 = Base()
m2 = Base()
print id(m1) == id(m2)