python學習 設計模式之單例模式

2021-08-25 17:06:50 字數 1584 閱讀 1558

(一)什麼是單例模式

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。

(二)實現單例的方法

(三)模組

python 模組在第一次匯入時,會生成 .pyc 檔案,當第二次匯入時,就會直接載入 .pyc 檔案,而不會再次執行模組**。因此,我們只需把相關的函式和資料定義在乙個模組中,就可以獲得乙個單例物件了。

(四)new方法

# -*- coding: utf-8 -*-

__author__ = 'loco_python'

class person(object):

_instance = none

_is_init = false

# 實現單例模式

def __new__(cls, *args, **kwargs):

if not cls._instance:

# 如果沒有建立物件,我們就建立物件

cls._instance = super(person, cls).__new__(cls, *args, **kwargs)

# 無論如何我們只返回乙個物件

return cls._instance

# 只做一次初始化。

def __init__(self, name, age):

if not self._is_init:

self.name = name

self.age = age

self._is_init = true

def __str__(self):

return self.name

p1 = person('xiaohua', 18)

p2 = person('xiaowang', 19)

# p1和p2同一位址

print id(p1), id(p2) # 4308349264 4308349264

# 只初始化了第一次

print p1, p2 # xiaohua xiaohua

(五)裝飾器

__author__ = 'loco_python'

from functools import wraps

def singleton(cls):

_instance = {}

@wraps(cls)

if cls not in _instance:

_instance[cls] = cls(*args, **kwargs)

return _instance[cls]

@singleton

class person:

def __init__(self):

pass

p = person()

p1 = person()

print id(p), id(p1) # 4501461760 4501461760

Python之單例設計模式

單例是一種設計模式,應用該模式的類只會生成乙個例項。單例模式保證了在程式的不同位置都可以且僅可以取到同乙個物件例項 如果例項不存在,會建立乙個例項 如果已存在就會返回這個例項。因為單例是乙個類,所以你也可以為其提供相應的操作方法,以便於對這個例項進行管理。以下是實現方法索引 使用 new 方法在創造...

Python設計模式之單例模式

站 物件 印表機 物件 使用類名 建立物件時,python 的直譯器首先 會 呼叫 new 方法為物件 分配空間。new 是乙個 由object基類提供的內建的靜態方法,主要作用有兩個 python 的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給 init 方法。重寫 new 方法 的...

python設計模式之單例模式

單例模式是一種建立型設計模式,它確保乙個類有且只有乙個特定型別的物件,並提供全域性訪問點。其意圖為 簡單理解 單例即為單個例項,也就是每次例項化建立物件時獲得的都是同乙個物件,當然同乙個物件的屬性都是相同的,方法也是相同的,位址也是相同的,這樣給我們帶來的好處就是可以避免消耗過多的記憶體或cpu資源...