1子類調用父類構造方法python
class Animal(object): def __init__(self): print("init Animal class~") def run(self): print("animal run!") class Dog(Animal): def __init__(self): #若子類沒有重寫構造方法,則會調用父類的。不然python不會自動調用父類構造方法。
#顯式的調用父類構造方法的三種方式 #Animal.__init__(self) #super(Dog, self).__init__() super().__init__() print("init Dog class~") def run(self): print("dog run!")
測試Dog().run()運行結果以下函數
init Animal class~ init Dog class~ dog run!
子類實現了本身構造函數,就會調用本身的構造函數,python不會自動調用父類構造函數(與Java不同),既然是繼承,辣麼就應該在子類的構造函數裏面手動調用父類的構造函數。上述有三種方式。測試
若將Dog類改成:spa
class Dog(Animal): def run(self): print("dog run!")
這裏Dog用的默認構造函數,測試Dog().run()運行結果以下code
init Animal class~ dog run
子類沒有定義本身的構造函數時,會調用父類的構造函數。若是有多個父類呢?blog
class Animal(object): def __init__(self): print("init Animal class~") def run(self): print("animal run!") class Father(object): def __init__(self): print("init Father class~") class Dog(Animal,Father): def run(self): print("dog run!")
測試Dog().run()運行結果以下繼承
init Animal class~ dog run!
只會運行Animal的構造函數,若將Father放在第一個父類it
class Dog(Father,Animal): def run(self): print("dog run!")
測試Dog().run()運行結果以下class
init Father class~ dog run!
子類沒有定義本身的構造函數時,只會調用第一個父類的構造函數。object
2子類調用父類普通方法
class Animal(object): def run(self): print("animal run!") class Bird(Animal): def run(self): #Animal.run(self) #super(Bird, self).run() super().run()
測試Bird().run()運行結果以下:
animal run!
能夠發現和調用構造方法的方式是同樣的。