python中子類調用父類的方法

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!

能夠發現和調用構造方法的方式是同樣的。

相關文章
相關標籤/搜索