真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python下如何實現(xiàn)單例模式-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Python下如何實現(xiàn)單例模式的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

超過10余年行業(yè)經(jīng)驗,技術(shù)領先,服務至上的經(jīng)營模式,全靠網(wǎng)絡和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務范圍包括了:網(wǎng)站設計、成都做網(wǎng)站,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡托管,小程序開發(fā),微信開發(fā),APP應用開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡營銷和我們一樣獲得訂單和生意!

Python 下的單例模式

要點:

  1. 1.某個類只能有一個實例;

  2. 2.它必須自行創(chuàng)建這個實例;

  3. 3.它必須自行向整個系統(tǒng)提供這個實例

方法:重寫new函數(shù)

應該考慮的情況:

  1. 1.這個單例的類可能繼承了別的類

  2. 2.這個單例的類還有可能要接收參數(shù)來實例化

要點:

實例化的過程其實不是直接調(diào)用init的,首先是new分配一塊空間來創(chuàng)建實例,再由init對這個實例進行初始化.我們無法阻止new和init的調(diào)用,我們只能是限制他們的內(nèi)容,以此使他們能達到單例的目的

代碼:

class people(object):
	def __new__(cls,*args,**kargs):
		return super(people,cls).__new__(cls)
	def __init__(self,name):
		self.name = name
		
	def talk(self):
		print("hello,I am %s" %self.name)
	
	
	
class student(people):
	def __new__(cls,*args,**kargs):
		if not hasattr(cls,"instance"):
			
			cls.instance = super(student,cls).__new__(cls,*args,**kargs)
		return cls.instance

a = student("Timo")
print(a)
b = student("kysa")
c = student("Luyi")
a.talk()
b.talk()
print(c)

這里的輸出結(jié)果是:

<__main__.student object at 0x0000025AC48BF2E8>
hello,I am Luyi
hello,I am Luyi
<__main__.student object at 0x0000025AC48BF2E8>

可以確定的是: 確實是單例了,因為a的id和b,c的id是一致的

但是為什么:a先創(chuàng)建明明是Timo,可是為什么a的name變成了Luyi呢?

原因:
雖然確實是a這個實例,但是在最后c重新調(diào)用了new,返回了a的實例,再經(jīng)過init,改變了a的屬性,執(zhí)行時name ->Luyi.

解決:
這種情況下,我們只需要設置類變量,讓init在類變量的限制下,只對類進行一次有效的初始化.

代碼:

class people(object):
	def __new__(cls,*args,**kargs):
		return super(people,cls).__new__(cls)
	def __init__(self,name):
		self.name = name
		
	def talk(self):
		print("hello,I am %s" %self.name)
	
	
	
class student(people):
	def __new__(cls,*args,**kargs):
		if not hasattr(cls,"instance"):
			cls.instance = super(student,cls).__new__(cls,*args,**kargs)
		return cls.instance
	def __init__(self,name):
		if not hasattr(self,"init_fir"):
			self.init_fir = True
			super(student,self).__init__(name)
a = student("Timo")
print(a)
b = student("kysa")
c = student("Luyi")
a.talk()
b.talk()
print(c)

感謝各位的閱讀!關(guān)于“Python下如何實現(xiàn)單例模式”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


本文標題:Python下如何實現(xiàn)單例模式-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://weahome.cn/article/djjcss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部