Python中__init__方法

 

 

注意1、__init__並不至關於C#中的構造函數,執行它的時候,實例已構造出來了。python

1
2
3
4
5
class  A( object ):
     def  __init__( self ,name):
         self .name = name
     def  getName( self ):
         return  'A ' + self .name

當咱們執行函數

1
a = A( 'hello' )

時,能夠理解爲post

1
2
a = object .__new__(A)
A.__init__(a, 'hello' )

即__init__做用是初始化已實例化後的對象。spa

注意2、子類能夠不重寫__init__,實例化子類時,會自動調用超類中已定義的__init__code

1
2
3
4
5
6
7
class  B(A):
     def  getName( self ):
         return  'B ' + self .name
 
if  __name__ = = '__main__' :
     b = B( 'hello' )
     print  b.getName()

但若是重寫了__init__,實例化子類時,則不會隱式的再去調用超類中已定義的__init__對象

1
2
3
4
5
6
7
8
9
class  C(A):
     def  __init__( self ):
         pass
     def  getName( self ):
         return  'C ' + self .name
 
if  __name__ = = '__main__' :
     c = C()
     print  c.getName()

則會報"AttributeError: 'C' object has no attribute 'name'」錯誤,因此若是重寫了__init__,爲了能使用或擴展超類中的行爲,最好顯式的調用超類的__init__方法blog

1
2
3
4
5
6
7
8
9
class  C(A):
     def  __init__( self ,name):
         super (C, self ).__init__(name)
     def  getName( self ):
         return  'C ' + self .name
 
if  __name__ = = '__main__' :
     c = C( 'hello' )   
     print  c.getName()
相關文章
相關標籤/搜索