global關鍵字
一句話概括為:告訴python解釋器,global聲明的變量為全局作用域內定義的變量。解釋器就會到全局作用域內尋找global定義的變量。

python的類屬性
類屬性相當於其他OO語言的類中的靜態變量,定義在類中的屬性為類的所有實例所共享。
類屬性有兩種訪問方式:1、通過“類名.變量”的形式訪問。2、通過"類實例對象.變量"訪問。
1 #!coding:utf8 2 3 class A(object): 4 a = 1 5 def __init__(self): 6 pass 7 8 if __name__ == '__main__': 9 test = A() 10 print test.a 11 print A.a
結果均輸出1
但是強烈建議使用類名的方式調用,原因:1、類屬性使用類名的方式調用更加規范。2、類的實例對象在進行變量查找的時候,會先查找實例屬性(變量),然后才會去查找類屬性。所以若實例有同名的屬性,則不會調用類屬性,則會達不到預期結果。
下面大家在看看找個程序的輸出結果是什么?

結果為:

其他的不需要過多的解釋都是很正常,按照前面的查找理論都可以解釋清楚。在這里我想和大家講下我對類屬性__var和實例屬性self.__var的理解:
首先把結論和大家說下,__var類屬性和實例屬性self.__var都被python解釋器轉換為_Test__var的名字了,所以后面在以Test.__var和t.__var的方式對其進行賦值的時候,都是向類或者對象實例中添加屬性而已,這個可以通過dir的方式查看,如圖:

為什么會是這樣呢?
我是這樣理解的,"."是一個運算符,在定義類的外部的操作過程是這樣的(純屬臆測,愛信不信:-D):在進行賦值的時候,即進行左值運算的時候,若該屬性在類中已有,則覆蓋該值,若沒有,則會創建該屬性,並進行賦值。同時創建的屬性名即為點運算符后的變量名(全部作為一個字符串),這樣的雙下划線只會作為字符串的一部分存在,沒有任何特殊意思,而在類中,下划線會被解釋為含有特殊意思,即在雙下划線前加上"_類名"。總結起來感覺很像一個字典操作,其實通過__dict__屬性也可以驗證我的這個猜想,大部分的鍵即為點后面定義的變量名,而雙下划線卻會被轉義。
歡迎大家指正,共同進步。
