欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python下簡(jiǎn)易的單例模式詳解

 更新時(shí)間:2019年04月08日 10:07:27   作者:whyfive4  
這篇文章主要介紹了Python下簡(jiǎn)易的單例模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Python 下的單例模式

要點(diǎn):

  1. 1.某個(gè)類只能有一個(gè)實(shí)例;
  2. 2.它必須自行創(chuàng)建這個(gè)實(shí)例;
  3. 3.它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例

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

應(yīng)該考慮的情況:

  1. 1.這個(gè)單例的類可能繼承了別的類
  2. 2.這個(gè)單例的類還有可能要接收參數(shù)來(lái)實(shí)例化

要點(diǎn):

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

代碼:

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>

可以確定的是: 確實(shí)是單例了,因?yàn)閍的id和b,c的id是一致的

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

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

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

代碼:

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)

好了,到這里就用Python實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的單例模式.

以上所述是小編給大家介紹的Python下簡(jiǎn)易的單例模式詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • python中pygame模塊用法實(shí)例

    python中pygame模塊用法實(shí)例

    這篇文章主要介紹了python中pygame模塊用法實(shí)例,通過(guò)圖形繪制來(lái)簡(jiǎn)單講述了pygame模塊的用法,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Sanic框架Cookies操作示例

    Sanic框架Cookies操作示例

    這篇文章主要介紹了Sanic框架Cookies操作,結(jié)合實(shí)例形式分析了Sanic框架cookie讀取、寫(xiě)入及刪除等簡(jiǎn)單操作技巧,需要的朋友可以參考下
    2018-07-07
  • python學(xué)習(xí)之列表的運(yùn)用

    python學(xué)習(xí)之列表的運(yùn)用

    這篇文章主要介紹了python學(xué)習(xí)之列表的運(yùn)用,文章首先通過(guò)創(chuàng)建列表展開(kāi)列表運(yùn)用的相關(guān)資料,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回

    詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回

    RabbitMQ是一款基于MQ的服務(wù)器,Python可以通過(guò)Pika庫(kù)來(lái)進(jìn)行程序操控,這里我們將來(lái)詳解Python操作RabbitMQ服務(wù)器消息隊(duì)列的遠(yuǎn)程結(jié)果返回:
    2016-06-06
  • python區(qū)塊鏈簡(jiǎn)易版交易完善挖礦獎(jiǎng)勵(lì)示例

    python區(qū)塊鏈簡(jiǎn)易版交易完善挖礦獎(jiǎng)勵(lì)示例

    這篇文章主要介紹了python區(qū)塊鏈簡(jiǎn)易版交易完善挖礦獎(jiǎng)勵(lì)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 利用Python實(shí)現(xiàn)繪制論文中的曲線圖

    利用Python實(shí)現(xiàn)繪制論文中的曲線圖

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)繪制論文中需要的曲線圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • PyCharm 專業(yè)版安裝圖文教程

    PyCharm 專業(yè)版安裝圖文教程

    這篇文章主要介紹了PyCharm 專業(yè)版安裝圖文教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹

    python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹

    這篇文章主要介紹了python numpy之np.random的隨機(jī)數(shù)函數(shù)使用介紹,需要的朋友可以參考下
    2019-10-10
  • python 實(shí)現(xiàn)Requests發(fā)送帶cookies的請(qǐng)求

    python 實(shí)現(xiàn)Requests發(fā)送帶cookies的請(qǐng)求

    這篇文章主要介紹了python 實(shí)現(xiàn)Requests發(fā)送帶cookies請(qǐng)求的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-02-02
  • python提取特定格式的數(shù)據(jù)的操作方法

    python提取特定格式的數(shù)據(jù)的操作方法

    這篇文章主要介紹了python提取特定格式的數(shù)據(jù),通過(guò)本腳本,我們學(xué)習(xí)了如何使用 Pandas 讀取和處理 Excel 數(shù)據(jù),如何使用 Tkinter 創(chuàng)建圖形用戶界面,以及如何處理文件對(duì)話框和文件操作,需要的朋友可以參考下
    2024-06-06

最新評(píng)論