最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 用__new__方法實現(xiàn)單例的操作

 更新時間:2020年12月11日 09:57:06   作者:hiudawn  
這篇文章主要介紹了Python 用__new__方法實現(xiàn)單例的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

介紹

init 方法通常用在初始化一個類實例時候,但其實它不是實例化一個類的時候第一個被調(diào)用 的方法。當使用 Student(id, name) 這樣的表達式來實例化一個類時,最先被調(diào)用的方法 其實是 new 方法。

new方法接受的參數(shù)雖然也是和init一樣,但init是在類實例創(chuàng)建之后調(diào)用,而 new方法正是創(chuàng)建這個類實例的方法。

new為對象分配空間,是內(nèi)置的靜態(tài)方法,new在內(nèi)存中為對象分配了空間也返回了對象的引用,init獲得了這個引用才初始化這個實例。

示例

一個非常簡單的單例

class A:
 instance = None
 def __new__(cls, *args, **kwargs):
  if cls.instance is None:
   cls.instance = super().__new__(cls)
  return cls.instance

因為new方法是一個靜態(tài)方法(也就是在定義的時候就沒有cls參數(shù)),所以在這里要傳入一個cls參數(shù),而且這里的new你改造過了,所以要返回爸爸的new方法。

按造這個方法改造的單例怎么new都是同一個實例,但init仍然會被執(zhí)行多次,也就是創(chuàng)建了幾個對象就調(diào)用幾次初始化方法。所以還要對init再進行一些判斷。

class A:
 instance = None
 init_flag = False # 初始化標記

 def __new__(cls, *args, **kwargs):
  if cls.instance is None:
   cls.instance = super().__new__(cls)
  return cls.instance

 def __init__(self):
  if A.init_flag:
   return
  print('執(zhí)行了初始化方法')
  A.init_flag = True

if __name__ == '__main__':
 a = A()
 b = A()
 print(a)
 print(b)

輸出結(jié)果:

執(zhí)行了初始化方法

<main.A object at 0x00000210E6F09320>

<main.A object at 0x00000210E6F09320>

總結(jié)

通過重載new方法,可以比較簡單地實現(xiàn)單例,Python還有很多有趣的內(nèi)置函數(shù),有空可以再研究研究。

補充知識:Python餓漢式和懶漢式單例模式的實現(xiàn)

看代碼吧~

# 餓漢式
class Singleton(object):
 # 重寫創(chuàng)建實例的__new__方法
 def __new__(cls):
  # 如果類沒有實例屬性,進行實例化,否則返回實例
  if not hasattr(cls, 'instance'):
   cls.instance = super(Singleton, cls).__new__(cls)
  return cls.instance

餓漢式在創(chuàng)建的時候就會生成實例

# 懶漢式
class Singleton(object):
 __instance = None
 def __init__(self):
  if not self.__instance:
   print('調(diào)用__init__, 實例未創(chuàng)建')
  else:
   print('調(diào)用__init__,實例已經(jīng)創(chuàng)建過了:', __instance)

 @classmethod
 def get_instance(cls):
  # 調(diào)用get_instance類方法的時候才會生成Singleton實例
  if not cls.__instance:
   cls.__instance = Singleton()
  return cls.__instance

以上這篇Python 用__new__方法實現(xiàn)單例的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python使用Holoviews創(chuàng)建復雜的可視化布局

    Python使用Holoviews創(chuàng)建復雜的可視化布局

    Holoviews是一個基于Python的開源庫,旨在簡化數(shù)據(jù)可視化的創(chuàng)建過程,本文將為新手朋友詳細介紹如何使用Holoviews創(chuàng)建復雜的可視化布局,感興趣的可以了解下
    2024-11-11
  • Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解

    Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解

    這篇文章主要介紹了Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解,zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內(nèi)存,需要的朋友可以參考下
    2023-08-08
  • python如何利用中心坐標繪制矩形

    python如何利用中心坐標繪制矩形

    這篇文章主要介紹了python如何利用中心坐標繪制矩形問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python使用cx_Oracle調(diào)用Oracle存儲過程的方法示例

    Python使用cx_Oracle調(diào)用Oracle存儲過程的方法示例

    這篇文章主要介紹了Python使用cx_Oracle調(diào)用Oracle存儲過程的方法,結(jié)合具體實例分析了Python中通過cx_Oracle調(diào)用PL/SQL的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Python+Tkinter制作猜燈謎小游戲

    Python+Tkinter制作猜燈謎小游戲

    元宵節(jié),又稱上元節(jié)、燈節(jié),是春節(jié)之后的第一個重要節(jié)日。而元宵節(jié)除了吃元宵、看花燈,還有一件最重要的事情就是猜燈謎!因此本文將通過Python Tkinter制作一個猜燈謎小游戲,感興趣的小伙伴可以了解一下
    2022-02-02
  • Python按照某列內(nèi)容對兩個DataFrame進行合并操作方法

    Python按照某列內(nèi)容對兩個DataFrame進行合并操作方法

    這篇文章主要給大家介紹了關(guān)于Python按照某列內(nèi)容對兩個DataFrame進行合并操作的相關(guān)資料,文中通過代碼示例介紹的非常詳細,對大家學習或者使用Python具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Python接口自動化測試框架運行原理及流程

    Python接口自動化測試框架運行原理及流程

    這篇文章主要介紹了Python接口自動化測試框架運行原理及流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 使用Python中的pytesseract模塊實現(xiàn)抓取圖片中文字

    使用Python中的pytesseract模塊實現(xiàn)抓取圖片中文字

    最近同事用網(wǎng)上提供掃描軟件進行掃描識別文字,每天上線只能夠做兩次掃描,請求我研發(fā)一個小工具幫助解決識別圖片的中文字,最終我選擇使用pytesseract模塊可以解決這個需求問題,本文給大家分享實現(xiàn)代碼操作感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • 使用Python?Seaborn創(chuàng)建熱力圖的制作指南

    使用Python?Seaborn創(chuàng)建熱力圖的制作指南

    熱力圖作為一種直觀的數(shù)據(jù)可視化工具,通過顏色深淺和漸變映射數(shù)據(jù)值,廣泛應用于數(shù)據(jù)密度分析、趨勢挖掘和跨維度對比,本文將結(jié)合Python的seaborn庫,從熱力圖的核心原理到實際操作案例,逐步講解如何利用熱力圖揭示數(shù)據(jù)背后的隱藏規(guī)律,需要的朋友可以參考下
    2025-08-08
  • influx+grafana自定義python采集數(shù)據(jù)和一些坑的總結(jié)

    influx+grafana自定義python采集數(shù)據(jù)和一些坑的總結(jié)

    一些數(shù)據(jù)的類型不正確會導致no datapoint的錯誤,真是令人抓狂,本文就是總結(jié)一下采集數(shù)據(jù)種的一些坑,希望大家可以從中獲益
    2018-09-09

最新評論

阳西县| 内乡县| 界首市| 郴州市| 略阳县| 永登县| 万安县| 汝城县| 清远市| 阳谷县| 汝城县| 黎川县| 长岭县| 霍邱县| 舞钢市| 本溪| 尚志市| 介休市| 阜平县| 那坡县| 井研县| 巴彦淖尔市| 汝城县| 信阳市| 巴里| 社旗县| 肇源县| 黄骅市| 卢氏县| 富源县| 游戏| 阳春市| 东乌珠穆沁旗| 民和| 宁武县| 垦利县| 平湖市| 九台市| 恭城| 雷波县| 寿宁县|