Python – 繼承 與 super()

測試環境為 CentOS 8 x86_64 (虛擬機)

參考文章 – https://walkonnet.com/archives/69842

下面來看一下 繼承 與 super()

  1. 範例 : Cat 與 Dog 子類別繼承 Animal 父類別
    [root@localhost ~]# vi Inheritance.py
    class Animal:
        def __init__(self,name):
            self._name = name
        def eat(self):
            print("{} {} eat".format(self.__class__.__name__ , self._name))
    
    class Cat(Animal):
        pass
    
    class Dog(Animal):
        pass
    
    a = Animal("Joe")
    a.eat()
    
    cat = Cat("garfield")
    cat.eat()
    
    dog = Dog("odie")
    dog.eat()
    

    執行結果

    [root@localhost ~]# python3 Inheritance.py
    Animal Joe eat
    Cat garfield eat
    Dog odie eat
    

    說明:
    Cat 與 Dog 子類別都沒寫東西,直接繼承自 Animal 父類別.

    class Cat(Animal):
        pass
     
    class Dog(Animal):
        pass
    

    產生 Cat 與 Dog 的 Instance 就可以直接使用 Animal 類別的屬性 Atrribute 與 方法 Method.

    cat = Cat("garfield")
    cat.eat()        
     
    dog = Dog("odie")
    dog.eat()
    
  2. 範例 : Cat 與 Dog 繼承 Animal 類別,但覆蓋其方法 Method.
    [root@localhost ~]# vi Overwrite.py
    class Animal:
        def __init__(self,name):
            self._name = name
        def eat(self):
            print("{} {} eat".format(self.__class__.__name__ , self._name))
    
    class Cat(Animal):
        def eat(self):
            print("{} {} eat sea food".format(self.__class__.__name__ , self._name))
    
    class Dog(Animal):
        pass
    
    a = Animal("Joe")
    a.eat()
    
    cat = Cat("garfield")
    cat.eat()
    
    dog = Dog("odie")
    dog.eat()
    

    執行結果

    [root@localhost ~]# python3 Overwrite.py
    Animal Joe eat
    Cat garfield eat sea food
    Dog odie eat
    

    說明:
    這次 Cat 子類別除了繼承自 Animal 父類別還改寫了 eat 這個 方法 Method.

    class Cat(Animal):
        def eat(self):
            print("{} {} eat sea food".format(self.__class__.__name__ , self._name))
    
  3. 範例 : Cat 與 Dog 繼承 Animal 類別,使用 Super().
    [root@localhost ~]# vi Supere.py
    class Animal:
        def __init__(self,name):
            self._name = name
        def eat(self):
            print("{} {} eat".format(self.__class__.__name__ , self._name))
    
    class Cat(Animal):
        def eat(self):
            print("{} {} eat sea food".format(self.__class__.__name__ , self._name))
            super().eat()
    
    class Dog(Animal):
        pass
    
    a = Animal("Joe")
    a.eat()
    
    cat = Cat("garfield")
    cat.eat()
    
    dog = Dog("odie")
    dog.eat()
    

    執行結果

    [root@localhost ~]# python3 Supere.py
    Animal Joe eat
    Cat garfield eat sea food
    Cat garfield eat
    Dog odie eat
    

    說明:
    這次 Cat 子類別除了繼承自 Animal 父類別還改寫了 eat 這個 方法 Method.

    class Cat(Animal):
        def eat(self):
            print("{} {} eat sea food".format(self.__class__.__name__ , self._name))
    

    我們還可以透過 super 去呼叫父類別 Animal 的 eat 這個 方法 Method.

            super().eat()
    

    除了 super().eat() 也可以寫成 super(Cat,self).eat()

    class Cat(Animal):
        def eat(self):
            print("{} {} eat sea food".format(self.__class__.__name__ , self._name))
    #        super().eat()
            super(Cat,self).eat()
    
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料