Python中物件導向之單例設計模式

2021-09-15 03:08:54 字數 1603 閱讀 4983

# 物件導向的單例設計模式

# 普通模式

class person:

def __init__(self,name,age):

self.name = name

self.age = age

obj1 = person('小明',20)

obj2 = person('小紅',25)

obj3 = person('小藍',30)

print(id(obj1),id(obj2),id(obj3)) # 輸出==>53414896 53414928 53415024

# 單例模式

# 實現方式:

# 1.建立乙個類靜態字段(類變數)__instance

# 2.建立乙個類方法,判斷__instance是否存在,不存在則將物件賦值給__instance,即__instance = 類();

如果存在,則直接呼叫返回__instance,這樣建立的物件位址都是一樣的

class foo:

__v = none

def __init__(self):

pass

@classmethod

def get__instance(cls):

if cls.__v:

return cls.__v

else:

cls.__v = foo()

return cls.__v

obj4 = foo.get__instance()

obj5 = foo.get__instance()

obj6 = foo.get__instance()

print(id(obj4),id(obj5),id(obj6)) # 輸出 ==> 53415056 53415056 53415056

class foo(object):

__obj = none

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

if not cls.__obj:

cls.__obj = super().__new__(cls)

return cls.__obj

else:

return cls.__obj

def __init__(self,name):

self.name = name

def say(self):

print(self.name)

a = foo("horns")

b = foo('xm')

a.say()

b.say()

# 當業務併發量很大的時候,按照以往的模式,乙個請求建立乙個物件,就會建立乙個新的空間,如果同時建立了三個物件,比如

# obj1,obj2,obj3,他們實現了相同的功能(通過person例項化出來的乙個物件,擁有同樣的屬性和方法,只有名字不一樣),這樣會

造成記憶體和程序的浪費。為了解決這個問題(問題:讓這些擁有相同方法的物件都有同樣的記憶體位址)於是產生了單例模式。

#通過單例模式製造出來的物件擁有相同的位址。 

python物件導向之單例模式

一.什麼叫單例模式 基於某種方法通過類例項化的得到的物件,或者說記憶體位址指向同乙個.總共有4種方式.最後乙個方式就是當作包匯入使用。方式一 方式一 settings.py檔案中內容 ip 1.1.1.1 port 3306 版本一import settings class mysql instan...

Python 物件導向 單例

單例設計模式 重寫 new 方法 的 非常固定!如果不返回任何結果,定義類屬性記錄單例物件引用 instance none def new cls,args,kwargs 1.判斷類屬性是否已經被賦值 if cls.instance is none cls.instance super new cl...

python物件導向程式設計 單例

單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!示例 class music object def new cls,args,kwargs 如果不返回任何結果,return super new c...