国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python中類變量與成員變量的使用注意點總結

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

2020-10-05 11:26Myths Python

python 的類中主要會使用的兩種變量:類變量與成員變量。類變量是類所有實例化對象共有的,而成員變量是每個實例化對象自身特有的。下面這篇文章主要給大家介紹了在python中類變量與成員變量的一些使用注意點,需要的朋友可以

前言

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

看下面的示例代碼:

?
1
2
3
4
class A:
 x = 0
 def __init__(self):
 self.y = 0

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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做出修改。然后構造一個實例a,對實例a的值進行修改,最后構造實例b。

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

?
1
2
3
4
5
6
[] 0
[] 0
['1'] 1
['1'] 0
['1'] 0
['1'] 0

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

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

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

總結

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

原文鏈接:https://blog.mythsman.com/2016/09/04/1/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区三 | 欧美操操操 | 玖玖玖视频 | 欧美激情在线播放 | 国产精选一区二区三区不卡催乳 | 激情网站免费观看 | av在线一区二区三区 | 精品久久国产老人久久综合 | 国产精品对白一区二区三区 | 成人精品国产一区二区4080 | 欧美精品一区二区三区在线播放 | 少妇精品久久久久久久久久 | 亚洲一区二区在线 | 国产精品久久久久久一区二区三区 | 国产日韩欧美不卡 | av毛片在线 | 精品久久久久久久久久 | 精品视频久久 | 91免费视频 | 91精品一区二区三区久久久久久 | av在线免费观看一区二区 | 精品久久久99 | 男女做爰猛烈叫床无遮挡 | 一级看片| 国产丝袜视频 | 国产人久久人人人人爽 | 国产毛片精品 | 久久懂色精品99综一区合 | 国产视频aaa | 国产精品视频久久久 | 免费欧美| 黄色影视在线免费观看 | 亚洲成人免费 | 午夜在线电影 | 亚洲成年人网站在线观看 | 亚洲欧美另类久久久精品2019 | 久久九九国产精品 | 亚洲自拍中文 | 青青草91在线视频 | 亚洲欧美精品一区 | 国产特级毛片aaaaaa毛片 |