單例模式(singleton patterns) 是一種常用的軟體設計模式, 該模式的主要目的是確保某乙個類只有乙個示例存在.
其實, python的模組就是天然的單例模式, 因為模組在第一次匯入時, 會生成".pyc"檔案, 當第二次匯入時, 就會直接載入".pyc"檔案, 而不會再次執行模組**.
# 將類的例項和乙個類變數_instance關聯起來, 如果cls._instance為none則建立例項, 否則直接返回cls._instance
class
singleton
(object):
_instance =
none
def__new__
(cls,
*args,
**kwargs):if
not cls._instance:
cls._instance =
super
(singleton, cls)
.__new__(cls,
*args,
**kwargs)
return cls._instance
class
myclass
(singleton)
: a =
1one = myclass(
)two = myclass(
)if one == two:
print
("true"
)if one is two:
print
("true")if
id(one)
==id
(two)
:print
("true"
)# 列印結果如下:
true
true
true
[finished in
0.1s]
#
from functools import wraps
defsingleton
(cls)
: instances =
@wraps(cls)
defgetinstance
(*args,
**kwargs)
:if cls not
in instances:
instances[cls]
= cls(
*args,
**kwargs)
:return instances[cls]
return getinstance
@singleton
class
myclass
(object):
a =1
class
singleton
(type):
_instances =
def__call__
(cls,
*args,
**kwargs)
:if cls not
in cls._instances:
cls._instances[cls]
=super
( singleton, cls)
.__call__(
*args,
**kwargs)
return cls._instances[cls]
# 元類(metaclass)可以控制類的建立過程, 主要做三件事
# 1. 攔截類的建立
# 2. 修改類的定義
# 3. 返回修改後的類
# python2
# class myclass(object):
# __metaclass__ = singleton
# python3
class
myclass
(metaclass=singleton)
: a =
1one = myclass(
)two = myclass(
)if one == two:
print
("true"
)if one is two:
print
("true")if
id(one)
==id
(two)
:print
("true"
)# 列印結果和上面的一模一樣
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...