
python:單例模式--使?__new__(cls)實現
單例模式:即?個類有且僅有?個實例。
那么通過python怎么實現?個類只能有?個實例呢。
class Earth:
"""
假如你是神,你可以創造地球
"""
print '歡迎來到地球'
# ?成?個地球
a = Earth()
print id(a)
# 再?成?個地球
b = Earth()
print id(b)
輸出:
歡迎來到地球
53356616
59869960
從上?例?可以看到,地球被創建了兩次,因為地球只能有?個,所以Earth類只能有?個實例,所以需要單例模式實現。
python中,?個類創建對象實例是通過調??類object的 __new__(cls)?法來創建對象的
我們可以通過重寫 __new__(cls)?法去實現類只創建?個實例,再創建的實例返回上?次的對象的引?。
class Earth(object):
"""
假如你是神,你可以創造地球
"""
# 定義?個類屬性做判斷
instance = None
def __new__(cls, *args, **kwargs):
# 如果instance為空則說明是第?次創建實例
# 通過?類的__new__(cls)創建實例
if ce == None:
# 調??類的__new__(cls)?法創建實例,并將該實例賦值給類變量instance,此時該變量的值從None變為該實例
ce = object.__new__(cls)
# print ce
# 返回實例化對象
return ce
el:
# 返回上?個對象的引?
return ce
# print '歡迎來到地球'
print '原始的instance值為:%s' % ce
# ?成?個地球
a = Earth()
# 創建實例后的instance值
print '創建實例后的instance值為:%s' % ce
print id(a)
# 再?成?個地球
b = Earth()
print id(b)
輸出:
原始的instance值為:None
創建實例后的instance值為:<__main__.Earth object at 0x0E10>
50925072
50925072
可以看到兩次的id相同,為同?個對象
參考:
多種實現單例模式:

本文發布于:2023-05-28 08:42:13,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1685234534182556.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:python:單例模式--使用__new__(cls)實現.doc
本文 PDF 下載地址:python:單例模式--使用__new__(cls)實現.pdf
| 留言與評論(共有 0 條評論) |