python 單例模式

2021-08-06 04:05:01 字數 1893 閱讀 5927

所有例項中封裝的資料相同時,下面有兩個例子,通過第乙個例子執行我們發現,我們這個建立的類是為了進行,多例項化也就是每個物件賦予不同屬性值,這種就不符合單例模式,再來看一下第二個例子,明顯屬性一樣實際上只需要建立一次就可以了,多次建立只會占用記憶體位址,這種就適合做單例模式

例一:

class  person(object):

def __init__(self,name,age):

self.name = name

self.age =age

def f1(self):

pass

def f2(self):

pass

xiaoming = person("w",12)

print(xiaoming)

xiaohong = person('s',13)

print(xiaohong)

<__main__.person object at 0x000000946465aac8>

<__main__.person object at 0x000000946465a5c0>

例二:

class person(object):

def __init__(self):

self.name = '123'

self.age = '456'

def f1(self):

pass

def f2(self):

pass

xiaoming = person()

print(xiaoming)

xiaoming = person()

print(xiaoming)

<__main__.person object at 0x00000062c57ea390>

<__main__.person object at 0x00000062c5963240>

如何優化列二做到單例模式:

class sqlpool:

__attr = none

@staticmethod

def connection():

if sqlpool.__attr:

return sqlpool.__attr

else :

#例項化

sqlpool.__attr =sqlpool()

return sqlpool.__attr

def __init__(self):

self.ip = '1.1.1'

def connections(self):

pass

i= 0

while i<5:

pool = sqlpool.connection()

i = 1+i

print(i)

print(pool)

設定乙個類屬性用來接受例項化init,讓每乙個物件最後返回同乙個init例項化

總結:

1.單列 只有乙個例項

2.靜態方法+靜態字段

3.所有的例項中封裝的內容相同時,用單例模式

python單例模式繼承 python單例模式

我們可以使用 new 這個特殊方法。該方法可以建立乙個其所在類的子類的物件。更可喜的是,我們的內建 object 基類實現了 new 方法,所以我們只需讓 sing 類繼承 object 類,就可以利用 object 的 new 方法來建立 sing 物件了。classsing object def...

單例模式 python

單例模式 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。實現 某個類只有乙個例項 途徑 1 讓乙個全域性變數使得乙個物件被訪問,但是它不能防止外部例項化多個物件。2 讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立。即單例模式。多執行緒時的單例模式 加鎖 雙重鎖定。餓漢式...

python單例模式

new 在 init 之前被呼叫,用於生成例項物件。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。單例模式是指建立唯一物件,單例模式設計的類只能例項 例項化1個物件。class singleton object instance none def init self pass def ne...