python中的單例

2022-09-18 03:03:28 字數 1832 閱讀 5551

單例模式是一種常用的軟體設計模式,核心結構是只包含乙個被稱為單例類的特殊類,通過單例模式可以保證系統中只有乙個例項而且該例項易於外界訪問,從而控制例項數量來保證系統資源的節省。可以用於列印任務,以及類中例項只有乙個的情況下。單例模式設計的類只能例項,單例的四種方法要了解,類的call方法要能默寫。

1 使用new 方法, 注意的是多執行緒無法支援這種方法建立的單例,因此要加鎖,第一次判斷是否單例物件,第二次判斷是解決多執行緒下的問題。 推薦使用

import

threading

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 共享屬性

class

dic(object):

_state ={}

def__new__(cls,*args,**kw):

obj = super().__new__(cls,*args,**kw)

obj.

__dict__ =cls._state

return

objclass

myclass(dic):

pass

myclass()

3 裝飾器

def

singleton(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

class

my_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 ...