繼承

緊接著我們來談談繼承。

回頭來看看我們的貓,假設現在我們擴充了一些功能:

class Cat:

    def __init__(self, name):
        self.name = name

    def run(self):
        print(self.name, 'runs')

    def jump(self):
        print(self.name, 'jumps')

    def shout(self):
        print('Meow')

我們發現 Cat 類別的物件將會擁有跑及跳的能力,好了,這世界上可不只有貓這種動物,我們也想寫一個 Dog 類別:

class Dog:

    def __init__(self, name):
        self.name = name

    def run(self):
        print(self.name, 'runs')

    def jump(self):
        print(self.name, 'jumps')

    def shout(self):
        print('Bark')

看樣子沒有問題,簡單的很,而且跟 Cat 類別實在是太像了,除了叫聲不同而已,甚至用複製貼上大法可以加速我撰碼的速度呢!

噢,如果真的是這麼做的話就慘了,大量重複的代碼會造成管理上的困難,更何況我們連複製貼上都懶,世界上有千萬種動物,我們要怎麼搞定這麼多具有相似特性卻略有不同的類別呢?

很簡單!我們抽取出他們的共性,寫成一個 Animal 類別,再分別繼承他們就好拉!請看:

class Animal:

    def __init__(self, name):
        self.name = name

    def run(self):
        print(self.name, 'runs')

    def jump(self):
        print(self.name, 'jumps')


class Cat(Animal):

    def shout(self):
        print('Meow')


class Dog(Animal):

    def shout(self):
        print('Bark')

在類別名稱後面加入小括號與要繼承的類別(我們稱之為 父類別 或是 基礎類別 ),就可以繼承基礎類別的屬性和方法,然後我們可以為該類別(我們稱之為 子類別衍生類別 )新增一些屬於自己的方法甚至是覆寫掉一些基礎類別的方法,透過此手法,我們能夠輕鬆創造出更多的類別。

我們來看看如何覆寫掉方法,假設今天我們創造了人類這種 Animal,我們想要在建構方法裡面新增人類的身分證號碼:

class Human(Animal):

    def __init__(self, name, id):
        self.name = name
        self.id = id

透過上面的方法,我們能夠以新定義的__init__取代基礎類別的__init__

說到這裡,且讓我們停下來看一下 __init__,這個方法大家千萬不要以為取哪個名字都行,原因是這樣的,我們的所有類別其實都繼承自 Python 中的 object 類別,那怕是像 Aninmal 類別看起來好像沒有繼承別人,但他的確是繼承了 object,在這個最最基礎的類別中,__init__ 早就定義過了,我們不過是在覆寫他而已。

results matching ""

    No results matching ""