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