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

淺談python3 構(gòu)造函數(shù)和析構(gòu)函數(shù)

 更新時(shí)間:2020年03月12日 13:27:27   作者:jasonLee_lijiaqi  
這篇文章主要介紹了淺談python3 構(gòu)造函數(shù)和析構(gòu)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

要點(diǎn):

1、魔法方法,被__雙下劃線所包圍

在適當(dāng)?shù)臅r(shí)候自動(dòng)被調(diào)用

2、在創(chuàng)建一個(gè)對(duì)象的時(shí)候,一定會(huì)調(diào)用構(gòu)造函數(shù)

3、 del析構(gòu)函數(shù),在del a對(duì)象的時(shí)候,并一定會(huì)調(diào)用該析構(gòu)函數(shù)

只有當(dāng)該對(duì)象的引用計(jì)數(shù)為0時(shí)才會(huì)調(diào)用析構(gòu)函數(shù),回收資源

析構(gòu)函數(shù)被python的垃圾回收器銷(xiāo)毀的時(shí)候調(diào)用。當(dāng)某一個(gè)對(duì)象沒(méi)有被引用時(shí),垃圾回收器自動(dòng)回收資源,調(diào)用析構(gòu)函數(shù)

#coding=utf-8
'''
魔法方法,被__雙下劃線所包圍
在適當(dāng)?shù)臅r(shí)候自動(dòng)被調(diào)用
'''
#構(gòu)造init、析構(gòu)del
class Rectangle:
  def __init__(self,x,y):
    self.x = x
    self.y = y
    print('構(gòu)造')
  '''
  del析構(gòu)函數(shù),并不是在del a對(duì)象的時(shí)候就會(huì)調(diào)用該析構(gòu)函數(shù)
  只有當(dāng)該對(duì)象的引用計(jì)數(shù)為0時(shí)才會(huì)調(diào)用析構(gòu)函數(shù),回收資源
  析構(gòu)函數(shù)被python的垃圾回收器銷(xiāo)毀的時(shí)候調(diào)用。當(dāng)某一個(gè)對(duì)象沒(méi)有被引用時(shí),垃圾回收器自動(dòng)回收資源,調(diào)用析構(gòu)函數(shù)
  '''
  def __del__(self):
    print('析構(gòu)')
  def getPeri(self):
    return (self.x + self.y)*2
  def getArea(self):
    return self.x * self.y
if __name__ == '__main__':
  rect = Rectangle(3,4)
  # a = rect.getArea()
  # b = rect.getPeri()
  # print(a,b)
  rect1 = rect
  del rect1
  # del rect
  while 1:
    pass

補(bǔ)充知識(shí):Python 類(lèi)成員變量使用缺省值初始化時(shí)要注意的一個(gè)坑

Python 類(lèi)成員變量使用缺省值初始化時(shí)要注意的一個(gè)坑

標(biāo)簽(空格分隔): python2.7 python 3.6

考慮到如下場(chǎng)景:

定義class A,class A 包含成員變量 l 和 d, l為數(shù)組, d 為字典;

在 class A 的構(gòu)造函數(shù)中使用缺省參數(shù)初始化 A 的成員變量 l 和 d ;

具體代碼如下:

class A:
  def __init__(self, l=["name"], d={"key1": "test"}):
    self.l = l
    self.d = d

現(xiàn)在,在主邏輯函數(shù)中定義生成多個(gè) A 的實(shí)例, 構(gòu)造時(shí)使用構(gòu)造函數(shù)的缺省值:

if __name__ == "__main__":
  a1 = A()
  a2 = A()
  print (id(a1.l), id(a1.d))
  print (id(a2.l), id(a2.d))

輸出的結(jié)果如下:

python2.7 
(56305416L, 56376040L) 
(56305416L, 56376040L)

python3.6 
 2036953558112 
 2036953558112

可以看出,使用缺省值初始化的2個(gè) A 的實(shí)例中,對(duì)應(yīng)的成員變量 l 和 d 指向了同一個(gè)地址

現(xiàn)在假設(shè)需要在主邏輯函數(shù)中分別操作實(shí)例a1 和 a2:

if __name__ == "__main__":
  a1 = A()
  a2 = A()
  # print (id(a1.l), id(a1.d))
  # print (id(a2.l), id(a2.d))

  a1.l.extend(["a", "b", "C", "Xa"])
  a1.d["key"] = "value"

  print ("a1", a1.l, a1.d)
  print ("a2", a2.l, a2.d)

輸出結(jié)果會(huì)如下:

a1 ['name', 'a', 'b', 'C', 'Xa'] {'key1': 'test', 'key': 'value'}
a2 ['name', 'a', 'b', 'C', 'Xa'] {'key1': 'test', 'key': 'value'}

只修改a1,但 a2 的成員變量同時(shí)也被改變了!

此問(wèn)題實(shí)際場(chǎng)景中其中一個(gè)是在使用wxGride時(shí)會(huì)遇到:

class MyGrid(wx.grid.Grid):
  def __init__(self, parent, col_titles=["a", "b", "c"], data=[["1", "2", "3"]]):
    wx.grid.Grid__init__(self, parent=parent)
    self.col_titls = col_titles
    self.data = data
    ...

  def AppendData(self, rows=[], clear=Flase):
    self.data.extend(rows)
    msg = wx.grid.GridTableMessage(self,
                    wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED,
                    0,
                    len(rows))
    self.ProcessTableMessage(msg)

class MyFrame(wx.Frame):
  def __init(self, parent, title=""):
    wx.Frame.__init__(self, parent=parent, title=title)
    self.grid1 = MyGrid(self)
    self.grid2 = MyGrid(self)
    ...

  def onGridAddCallback(rows, force=False):
    if isinstance(rows, list) and len(rows) > 0:
      self.grid1.AppendData(rows, force) 

當(dāng)更新gird1的內(nèi)容時(shí),gird2的成員變量 data 也發(fā)生了改變,因此導(dǎo)致異常

可選的解決方案: 避免使用缺省值初始化指針類(lèi)型成員變量(list, dict …):

class MyFrame(wx.Frame):
  def __init(self, parent, title=""):
    wx.Frame.__init__(self, parent=parent, title=title)
    self.grid1 = MyGrid(self, col_titles=["a", "b", "c"], data=[["1", "2", "3"]])
    self.grid2 = MyGrid(self, col_titles=["a", "b", "c"], data=[["1", "2", "3"]])
    ...

以上這篇淺談python3 構(gòu)造函數(shù)和析構(gòu)函數(shù)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中os.path模塊的8個(gè)神奇函數(shù)分享

    Python中os.path模塊的8個(gè)神奇函數(shù)分享

    在Python編程中,os.path模塊是一個(gè)非常重要的模塊,它提供了用于處理文件路徑和目錄的函數(shù),本文將介紹os.path模塊中最常用的8個(gè)內(nèi)置函數(shù),需要的可以參考下
    2023-11-11
  • python中利用Future對(duì)象異步返回結(jié)果示例代碼

    python中利用Future對(duì)象異步返回結(jié)果示例代碼

    future是一種對(duì)象,表示異步執(zhí)行的操作。下面這篇文章主要給大家介紹了關(guān)于python中利用Future對(duì)象異步返回結(jié)果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • spark: RDD與DataFrame之間的相互轉(zhuǎn)換方法

    spark: RDD與DataFrame之間的相互轉(zhuǎn)換方法

    今天小編就為大家分享一篇spark: RDD與DataFrame之間的相互轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • linux系統(tǒng)使用python獲取cpu信息腳本分享

    linux系統(tǒng)使用python獲取cpu信息腳本分享

    這篇文章主要介紹了linux系統(tǒng)使用python獲取cpu信息腳本,大家參考使用吧
    2014-01-01
  • python版單鏈表反轉(zhuǎn)

    python版單鏈表反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了python版單鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python命令 -u參數(shù)用法解析

    python命令 -u參數(shù)用法解析

    這篇文章主要介紹了python命令 -u參數(shù)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python獲取svn版本信息

    Python獲取svn版本信息

    本文主要介紹了Python獲取svn版本信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python面積圖之曲線圖的填充

    python面積圖之曲線圖的填充

    這篇文章主要介紹了python面積圖之曲線圖的填充,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-06-06
  • python編程嵌套函數(shù)實(shí)例代碼

    python編程嵌套函數(shù)實(shí)例代碼

    這篇文章主要介紹了python編程嵌套函數(shù)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng)完整案例【基于搭建的MVC框架】

    Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng)完整案例【基于搭建的MVC框架】

    這篇文章主要介紹了Python實(shí)現(xiàn)的登錄驗(yàn)證系統(tǒng),結(jié)合完整實(shí)例形式分析了Python基于搭建的MVC框架進(jìn)行登錄驗(yàn)證操作的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-04-04

最新評(píng)論

临沂市| 昌邑市| 扎兰屯市| 邵阳县| 崇州市| 东兰县| 新丰县| 梁山县| 黎城县| 五峰| 甘肃省| 武鸣县| 嵊泗县| 昌吉市| 鲁甸县| 新野县| 佛学| 盐津县| 四平市| 拜城县| 峨眉山市| 南京市| 迭部县| 安阳市| 灵武市| 河南省| 库车县| 启东市| 米易县| 崇信县| 九江市| 厦门市| 安陆市| 望谟县| 峨边| 曲阜市| 华亭县| 大埔区| 怀安县| 长宁区| 金山区|