單例模式是一種常用的軟體設計模式,核心結構是只包含乙個被稱為單例類的特殊類,通過單例模式可以保證系統中只有乙個例項而且該例項易於外界訪問,從而控制例項數量來保證系統資源的節省。可以用於列印任務,以及類中例項只有乙個的情況下。單例模式設計的類只能例項,單例的四種方法要了解,類的call方法要能默寫。
1 使用new 方法, 注意的是多執行緒無法支援這種方法建立的單例,因此要加鎖,第一次判斷是否單例物件,第二次判斷是解決多執行緒下的問題。 推薦使用
importthreading
class
singleton(object):
lock =threading.lock()
def__new__(cls,*args,**kw):
ifnot hasattr(cls,'
_instance'):
with singleton.lock:
ifnot hasattr(singleton, "
_instance"):
cls._instance = object.__new__
(cls)
return
cls._instance
class
myclass(singleton):
print(1)
myclass()
2 共享屬性
classdic(object):
_state ={}
def__new__(cls,*args,**kw):
obj = super().__new__(cls,*args,**kw)
obj.
__dict__ =cls._state
return
objclass
myclass(dic):
pass
myclass()
3 裝飾器
defsingleton(cls):
state ={}
if cls not
instate:
state[cls] = cls(*args,**kw)
return
state
return
@singleton
class
my_singleton:
pass
4 import
#singleton.py
class
my_singleton():
deffoo(self):
pass
#use.py
from singleton import
my_singleton
my_singleton.foo()
5 call
classmy_singleton(type):
def__call__(cls,*args,**kw):
ifnot hasattr(cls,'
_instance'):
cls._instance = super().__call__(*args,**kw)
return
cls._instance
class my_class(metaclass=my_singleton):
def__init__
(self, name):
self.name =name
print(my_class('
123'
))print(my_class('
456'))
python中的單例
class practice object cls flag false def new cls if cls.cls flag false cls.cls flag object new cls 注意 object.new cls 括號中的 cls,將類傳到父類 object 中 return c...
python 單例 Python單例
01.單例設計模式 設計模式 設計模式 是 前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式都是針對 某一特定問題 的成熟的解決方案 使用 設計模式 是為了可重用 讓 更容易被他人理解 保證 可靠性 單例設計模式 目的 讓 類 建立的物件,在系統中 只有 唯一的乙個例項 每一次執行 類名 返回的...
python中的單例模式
單例模式 顧名思義是只有乙個例項記憶體位址,根據意思理解就是不論建立多少個例項物件,都只有乙個記憶體位址,單例模式是基於類的,是例項類物件,有別與 init init 是例項化物件.如下 domeclass single instance object instance none def init ...