Python類的特點 (1):構造函數與方法


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類中的方法必須由實例來調用(即所謂的綁定機制,方法必須和實例綁在一起才能調用),"類名.方法"這種寫法,語法上沒錯,但不能執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM