單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。
__new__()在__init__()之前被呼叫,用於生成例項物件。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。單例模式是指建立唯一物件,單例模式設計的類只能例項
1 使用__new__方法
[python] 純文字檢視
複製** ?
12
3
4
5
6
7
8
9
class
singleton(
object
):
def
__new__(
cls
,
*
args,
*
*
kw):
if
not
hasattr
(
cls
,
'_instance'
):
orig
=
super
(singleton,
cls
)
cls
._instance
=
orig.__new__(
cls
,
*
args,
*
*
kw)
return
cls
._instance
class
myclass(singleton):
a
=
1
2 共享屬性
建立例項時把所有例項的
__dict__
指向同乙個字典,這樣它們具有相同的屬性和方法.
[python] 純文字檢視
複製** ?
12
3
4
5
6
7
8
9
class
borg(
object
):
_state
=
{}
def
__new__(
cls
,
*
args,
*
*
kw):
ob
=
super
(borg,
cls
).__new__(
cls
,
*
args,
*
*
kw)
ob.__dict__
=
cls
._state
return
ob
class
myclass2(borg):
a
=
1
3 裝飾器版本
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
def
singleton(
cls
):
instances
=
{}
def
getinstance(
*
args,
*
*
kw):
if
cls
not
in
instances:
instances[
cls
]
=
cls
(
*
args,
*
*
kw)
return
instances[
cls
]
return
getinstance
@singleton
class
myclass:
...
4 import方法
作為python的模組是天然的單例模式
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
# mysingleton.py
class
my_singleton(
object
):
def
foo(
self
):
pass
my_singleton
=
my_singleton()
# to use
from
mysingleton
import
my_singleton
my_singleton.foo()
參考自----
python中單例模式
一 單例模式設計基礎概念 單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。目的 讓類建立物件,在系統中只有唯一的乙個實例子 每一次執行類名 返回的物件 記憶體...
python中的單例模式
單例模式 顧名思義是只有乙個例項記憶體位址,根據意思理解就是不論建立多少個例項物件,都只有乙個記憶體位址,單例模式是基於類的,是例項類物件,有別與 init init 是例項化物件.如下 domeclass single instance object instance none def init ...
Python 中的單例模式
單例就是解決在記憶體中始終只有乙個例項物件的問題,在python中實現起來很簡單,python中是通過new函式來分配記憶體的,舉個栗子 class musicplayer instance none def new cls,args,kwargs if cls.instance is none c...