首先定義一個名爲Student的類java
class Student: #__init__函數是類的構造函數,在實例化的時候作一些初始化工做 num = 1123 #類變量 name = 'wu' def __init__(self, name,age): self.name = name #實例變量,做用域是實例自己 self.age = age def get_score(self): #類方法 print("score = 99")
上邊這個類Student是類名類名通常要大寫這個是規範。 有幾個注意的點:
1. 類的屬性 2. 實例化 3. 類變量與實例變量(修改類變量) 4. 類的__init__方法(也叫構造函數) 5. 類變量的做用 6. 析構函數 7. 私有屬性 8. 私有方法
1.類的屬性
類的屬性分靜態屬性和動態屬性,類裏的實例變量和類變量都是靜態屬性。類裏邊的方法是類的動態屬性。
2 . 實例化python
p1 = Student("haha",20) #實例化獲得p1這個對象
3 . 類變量與實例變量(修改類變量)c++
直接放在類裏的是類變量,在__init__函數裏的是實例變量 類變量至關於一個默認值, 當類變量跟實例變量是同一個變量名的時候 對於當前這個對象來講實例變量覆蓋了類變量的值,也就是說優先找實例變量, 只有在實例變量不存在的狀況下才會找類變量 print(p1.num,p1.name) 這個語句輸出:1123 haha 類變量有一個name 實例變量也有一個name,先找實例變量 這個時候若是修改類變量num的值 先實例化一個變量 p2 = Student("xixi",30) p1.num = 10 print(p1.num,p1.name) print(p2.num,p2.name) 結果: 10 haha 1123 xixi 類變量並無改變,這裏的 p1.num = 10至關於給p1這個對象定義了一個實例屬性num 修改了值修改了值,並不會影響其餘對象。由於它的做用域是實例自己 要是真的想修改類變量應該怎麼寫呢? Student.num = 20這樣就修改了類變量的值
4 . 類的init函數程序員
類的__init__方法也叫構造函數, 什麼是構造函數,是一種特殊的函數。 主要用來在建立對象時初始化對象, 即爲對象成員變量賦初始值。
5.類變量的做用ide
定義公共屬性,這樣在對象實例化的時候,就不用再copy一份數據,節省內存開銷。
6.析構函數函數
類的__del__方法是析構函數,在c和c++中沒有垃圾回收機制, 因此程序員寫代碼時必須定義析構函數來作內存的釋放工做。 而在java和python中,自己就實現了垃圾回收機制,java中由java虛擬機來回收內存,python 中則由python解釋器來回收資源。 因此在python當中默認不須要定義析構函數, Python 會提供默認析構函數。若是有特殊須要能夠定義一個__del__方法 在實例對象調用結束時作一些掃尾工做。 析構函數會在對象做用域中調用結束時自動調用來釋放內存,無需手動調用。 若是要顯式的調用析構函數,可使用del關鍵字: del obj 這裏del調用其實不是直接去釋放內存,而是減小引用計數, 由垃圾回收機制來回收內存
7.私有屬性code
類的屬性分靜態屬性和動態屬性,一般咱們說類的屬性一般都是指類的靜態屬性。 如今來講私有屬性,定義類的私有屬性就是屬性前面加上__雙下劃線 私有屬性在外面是不能訪問的也即類的對象是不能直接調用的屬性。 能夠在類的內部訪問並修改。 class Person: def __init__(self,name,age,stature): self.name = name self.age = age self.__stature = 1.7 #私有屬性 def get_stature(self): return self.__stature p1 = Person("fransics",21,1.9) #print(p1.__stature) print(p1.get_stature()) 這個代碼片裏直接print私有屬性__stature是訪問不到的會報錯。而能夠經過類方法在內部訪問並返回。
8.私有方法對象
前面說過了私有屬性,私有方法也相似。定義的時候能夠經過函數名以前加__來完成定義。一樣是不能在外部訪問,只能內部訪問。