Python中,類的特點:
1 #encoding:utf-8 2 class Parent(object): 3 x=1 #x是Parent類的屬性(字段) 4 def __init__(self): 5 print 'creating Parents instance..' 6 7 class Child1(Parent): 8 pass 9 10 class Child2(Parent): 11 def __init__(self): 12 print 'creating Child2 instance..' 13 14 class Child3(Parent): 15 def __init__(self): 16 Parent.__init__(self)#若不調用這一行,將不執行父類的構造函數 17 print 'creating Child3 instance..' 18 class MyClass(): 19 def printMe(self): 20 print 'gege' 21 22 if __name__=='__main__': 23 24 '''類屬性和實例屬性的區別''' 25 p=Parent() 26 p.x=11 27 print Parent.x,p.x 28 Parent.x=5 29 print Parent.x,p.x 30 print '-------------------' 31 32 '''子類可以通過繼承獲得父類的屬性''' 33 print Child1.x 34 print '-------------------' 35 36 '''觀察構造函數的調用''' 37 c1=Child1()#Child1本身沒有構造函數,將調用父類的構造函數 38 print '-------------------' 39 c2=Child2()#Child2重寫了構造函數,將調用其自身的構造函數,且不再調用父類的構造函數 40 print '-------------------' 41 c3=Child3()#Child2重寫了構造函數,並且在構造函數內調用了父類的構造函數
輸出:
creating Parents instance.. 1 11 5 11 ------------------- 5 ------------------- creating Parents instance.. ------------------- creating Child2 instance.. ------------------- creating Parents instance.. creating Child3 instance..
Python中類的方法又有怎樣的特點?
1 #encoding:utf-8 2 class MyClass(): 3 def doPrint(self): 4 print 'doPrint invoked..' 5 6 7 if __name__=='__main__': 8 doPrint()#編譯不通過,提示 NameError: name 'doPrint' is not defined 9 MyClass.doPrint()#編譯通過,但運行時報錯,提示 TypeError: unbound method doPrint() must be called with MyClass instance as first argument (got nothing instead) 10 MyClass().doPrint()#正確運行,打印出 doPrint invoked..
以上測試說明Python中的類有以下幾個特點:
1. Python也有類似Java的靜態屬性(類屬性),但是不用static關鍵字修飾。那么如何區分類屬性還是實例屬性?參考第2條
2. Python類中的屬性若寫成 "類名.屬性" 形式,就是類屬性,若寫成"實例.屬性" 形式,就是實例的屬性,兩者互不干擾(修改類的屬性的值,不會改變實例屬性的值,反之亦然)
3. 構造函數:如果子類沒有,就用父類的;子類有的,就只用子類的,不再調用父類的(這與C++不同),若想調用父類的構造函數必須顯式的寫成 "父類.__init__(self,其他參數)",其中的self 即子類實例自身。
4. 沒有類似Java的類方法(用static修飾),Python類中的方法必須由實例來調用(即所謂的綁定機制,方法必須和實例綁在一起才能調用),"類名.方法"這種寫法,語法上沒錯,但不能執行。
