關於def __init__():


ref:https://www.cnblogs.com/liyichen/p/5931840.html

關於__init__()函數,其本身是python的構造方法。如果不清楚這一點,看着ta就會一臉懵逼。

這個函數類似init()初始化方法,來初始化新創建對象的狀態,在一個對象被創建以后會立即調用,

比如像實例化一個類:

class Cats:

  def __init__(self):

  self.age = 2 

 
>>>mimi = Cats()

>>>mimi.age

>>>2

我們會發現在初始化Cats中的age的值為2之后,

實例化直接就能夠調用age的值.

 

在明白了構造方法之后,我們來點進階的問題,那就是構造方法中的初始值無法繼承的問題。

class Dog:

    def __init__(self):

          self.hungry = True

    def eat(self):

          if self.hungry:

               print 'wang'

          else:

               print 'no'

class hsq(Bird):

     def __init__(self):

          self.fur = 'white'

     def play(self):

          print ("chaijia")

hh = haq()

hh.play()   #能正常輸出

hh.eat()     #報錯,因為hsq中沒有hungry特性

原理:在調用了一個實例的方法時,該方法的self參數會自動綁定到實例上(稱為綁定方法);

解決:使用super函數(只在新式類中有用)

class hsq(Dog):

     def __init__(self):

          super(Dog,self).__init__()

          self.sound = 'Squawk'

     def sing(self):

          print self.song()

在經典類中一般會直接寫:Dog.__init__(self)    替代    super(Dog,self).__init__()

 

至於新式類,經典類,換篇再說。。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------讀書湖邊學python


免責聲明!

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



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