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

python中類變量與成員變量的使用注意點總結(jié)

 更新時間:2017年04月29日 09:57:34   作者:Myths  
python 的類中主要會使用的兩種變量:類變量與成員變量。類變量是類所有實例化對象共有的,而成員變量是每個實例化對象自身特有的。下面這篇文章主要給大家介紹了在python中類變量與成員變量的一些使用注意點,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

最近在用python寫一個項目,發(fā)現(xiàn)一個很惡心的bug,就是同由一個類生成的兩個實例之間的數(shù)據(jù)竟然會相互影響,這讓我非常不解。后來聯(lián)想到java的類有類變量也有實例變量,因此翻閱了相關資料,發(fā)現(xiàn)python也有類似的類變量和實例變量,下面來看看詳細的介紹。

看下面的示例代碼:

class A:
 x = 0
 def __init__(self):
 self.y = 0

x就是類變量,y就是實例變量。

原則上是沒有錯的,但是實際用的時候就發(fā)現(xiàn)一些惡心的問題(也就是我找了三天的bug)。。。比如下面的代碼:

class A:
 x = []
 y = 0
 def __init__(self):
 pass
 def add(self):
 self.x.append('1')
 self.y+=1
a=A() 
print a.x,a.y
print A.x,A.y
a.add()
print a.x,a.y
print A.x,A.y
b=A() 
print b.x,b.y
print A.x,A.y

這里很明顯x和y都是類變量,add的作用是分別對x和y做出修改。然后構(gòu)造一個實例a,對實例a的值進行修改,最后構(gòu)造實例b。

本以為這個結(jié)果是顯而易見的,然而他輸出的結(jié)果卻是:

[] 0
[] 0
['1'] 1
['1'] 0
['1'] 0
['1'] 0

問題在哪?明明x和y都是類變量,在第二組print中為什么a.x和b.x一樣,但是a.y和b.y就是不一樣呢?

想了半天悟了一個道理。。。就是對于python來說,類變量的確是所有類共有的東西。但是那是在我們用的同一個引用的情況下,比如對于[]對象的append方法就是公用一個類變量了;但是對于賦值語句來說,如果在類中對類變量使用了賦值語句,那么python就會生成一個該對象的副本,以后的操作都是基于這個副本而不會對原來的類對象造成影響。這樣就解釋的通上面的現(xiàn)象了。

那么為了杜絕自己忘記類變量和實例變量的區(qū)別導致本不想公用變量的時候公用了變量,最好的辦法就是在每個類中使用變量的時候重新初始化一下,這樣就不會導致意外了。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 一文帶你安裝opencv與常用庫(保姆級教程)

    一文帶你安裝opencv與常用庫(保姆級教程)

    Python OpenCV是一種流行的計算機視覺庫,使用它可以進行圖像處理、視頻處理等操作,下面這篇文章主要給大家介紹了關于安裝opencv與常用庫的相關資料,需要的朋友可以參考下
    2023-05-05
  • python實現(xiàn)多線程網(wǎng)頁下載器

    python實現(xiàn)多線程網(wǎng)頁下載器

    這篇文章主要為大家詳細介紹了python實現(xiàn)一個多線程網(wǎng)頁下載器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Anaconda+VSCode配置tensorflow開發(fā)環(huán)境的教程詳解

    Anaconda+VSCode配置tensorflow開發(fā)環(huán)境的教程詳解

    Anaconda是一個開源的python發(fā)行版本,是現(xiàn)在比較流行的python數(shù)據(jù)科學平臺,可以對python的科學包做到有效管理。這篇文章主要介紹了Anaconda+VSCode配置tensorflow開發(fā)環(huán)境,需要的朋友可以參考下
    2020-03-03
  • python字符串加密解密的三種方法分享(base64 win32com)

    python字符串加密解密的三種方法分享(base64 win32com)

    這篇文章主要介紹了python字符串加密解密的三種方法,包括用base64、使用win32com.client、自己寫的加密解密算法三種方法,大家參考使用吧
    2014-01-01
  • Python?異步之在?Asyncio中如何運行阻塞任務詳解

    Python?異步之在?Asyncio中如何運行阻塞任務詳解

    這篇文章主要為大家介紹了Python?異步之在?Asyncio?中運行阻塞任務示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python爬蟲數(shù)據(jù)保存到mongoDB的實例方法

    python爬蟲數(shù)據(jù)保存到mongoDB的實例方法

    在本篇文章里小編給大家整理的是一篇關于python爬蟲數(shù)據(jù)保存到mongoDB的實例方法,有需要的朋友們可以參考下。
    2020-07-07
  • Python matplotlib 繪制雙Y軸曲線圖的示例代碼

    Python matplotlib 繪制雙Y軸曲線圖的示例代碼

    Matplotlib是非常強大的python畫圖工具,這篇文章主要介紹了Python matplotlib 繪制雙Y軸曲線圖,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 解決django前后端分離csrf驗證的問題

    解決django前后端分離csrf驗證的問題

    今天小編就為大家分享一篇解決django前后端分離csrf驗證的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 基于PyQt5實現(xiàn)圖轉(zhuǎn)文功能(示例代碼)

    基于PyQt5實現(xiàn)圖轉(zhuǎn)文功能(示例代碼)

    PyQt提供了一個設計良好的窗口控件集合,具有更方便的操作性。學過VB的同學會知道,相比與VB的使用,在界面設計上元素更豐富,這篇文章主要介紹了基于PyQt5完成的圖轉(zhuǎn)文功能,需要的朋友可以參考下
    2022-06-06
  • Python編程實現(xiàn)tail-n查看日志文件的方法

    Python編程實現(xiàn)tail-n查看日志文件的方法

    這篇文章主要介紹了Python編程實現(xiàn)tail-n查看日志文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論

鹿泉市| 东阿县| 霍林郭勒市| 哈巴河县| 酒泉市| 射阳县| 林芝县| 随州市| 通山县| 勃利县| 新野县| 同德县| 荆门市| 龙川县| 卢氏县| 商水县| 河南省| 亳州市| 利川市| 敖汉旗| 白银市| 镇宁| 上虞市| 西贡区| 齐齐哈尔市| 保德县| 镇平县| 杭州市| 桑植县| 贡嘎县| 大理市| 手机| 通州市| 金堂县| 青海省| 高雄县| 科技| 宝山区| 镇宁| 宁远县| 正安县|