# 物件導向的單例設計模式
# 普通模式
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...