iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
1
自我挑戰組

Deeplearning and PyQt5 tutorial系列 第 10

Day 10 停頓-介紹繼承問題

  • 分享至 

  • xImage
  •  

大家好~~歡迎來到第十篇介紹一下繼承的問題

程式繼承問題,有些人可能聽說,但是初學者可能對這個不熟,我就在這介紹給初學者們聽聽,簡單來說繼承就是你將一串程式碼的任何方式都接收下來,但是繼承有分,有些是繼承方法,有些是單純繼承但沒有他的方式,在python當中很常看見的是直接繼承方法,如果是使用 C 或者 JAVA 他有些繼承是沒有繼承方法,單純只是繼承一個形式搬移,這種又都很多不一樣在裡面。

class Equus:
    def __init__(self, is_male):
        pass
    def run(self):
        print(f'I run at speed {self.speed}')
        print(f'I\'m {self.gender}')
class Horse(Equus):
    def __init__(self, is_male):
        print('Horse init')
        self.speed = 30
        self.gender = 'male' if is_male else 'female'
        self.is_horse = True
    def roar(self):
        print('Hee haw~')
class Donkey(Equus):
    def __init__(self, is_female):
        print('Donkey init')
        self.speed = 20
        self.gender = 'female' if is_female else 'male'
        self.is_donkey = True
    def roar(self):
        print('Hee haw hee hee haw~')
        

上面這套程式中,有人有介紹到關於繼承上的問題,而且也有透過多重方式來做雙重繼承的作用,大家可以參考這套程式來做學習,繼承比想像中的簡單很多,只是要很熟記他的邏輯,因為他的邏輯比較複雜,你需要很清楚這時候寫了這個代表甚麼意思,你才能對他很了解。

所以我們上半部的程式我們會稱為父程式,我們子程式需要父的方法我們就會說繼承父程式就是父繼承的方式。

class Account:
    def __init__(self, id, name):
        self.id = id
        self.name = name
        self.balance = 0
        
    def deposit(self, amount):
        self.balance += amount
    
    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            raise ValueError('餘額不足')

    def __str__(self):
        return ('Id:\t\t' + self.id +
               '\nName:\t\t' + self.name +
               '\nBalance:\t' + str(self.balance))
               
class CheckingAccount(Account):
    def __init__(self, id, name):
        super(CheckingAccount, self).__init__(id, name) # 呼叫父類別__init__()
        self.overdraftlimit = 30000

    def withdraw(self, amount):
        if amount <= self.balance + self.overdraftlimit:
            self.balance -= amount
        else:
            raise ValueError('超出信用')

    def __str__(self):
        return (super(CheckingAccount, self).__str__() + 
                '\nOverdraft limit\t' + str(self.overdraftlimit));

上方程式中他是銀行的程式,他也利用繼承方式有做複寫的作用,所以這個例子大家也可以看看,這個做法也是蠻簡單易懂的。

繼承
繼承銀行

繼承,不繼承,方便即可,繼承最方便,所以父繼承,子接受


上一篇
Day 9 初學者邁入 PyQt 人機介面
下一篇
Day 11 初學者補給站 PyQt 安裝
系列文
Deeplearning and PyQt5 tutorial30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言