練習:類,類屬性,類方法,對象傳入[新增子類]

class BA(object):

    '''
    銀行帳戶 類
        屬性:
            name  帳戶名
            balance 餘額
        方法:
            SaveMoney   存錢
            DrawMoney   取錢
            GetBalance  餘額查詢
            Transfer    轉帳
    '''

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

    # 存錢
    def SaveMoney(self, money):
        self.__balance += money
        #print('存入:{0},餘額:{1}'.format(money, self.__balance))

    # 取錢
    def DrawMoney(self, money):
        if self.__balance >= money:
            self.__balance -= money
            #print('取出:{0},餘額:{1}'.format(money, self.__balance))
        else:
            print('餘額不足!')

    # 獲取帳戶餘額,由於設置__balance爲私有屬性,外部不能直接訪問
    def GetBalance(self):
        return ('餘額:{}'.format(self.__balance))

    # 轉帳
    def Transfer(self, ba, money):
        if self.name == ba.name:
            print('同一帳戶不能進行轉帳!')
        else:
            if self.__balance >= money:
                self.DrawMoney(money)
                ba.SaveMoney(money)
                print('轉帳到 {0} {1},餘額:{2}'.format(ba.name, money, self.__balance))
            else:
                print('餘額不足!')

zhang = BA('zhang', 1000)
wang = BA('wang', 1000)
zhang.Transfer(wang, 500)
print('wang 帳戶餘額:'+wang.GetBalance())

運行結果:
轉帳到 wang 500,餘額:500
wang 帳戶餘額:餘額:1500

感謝 冰風漫天 回答論壇提問 https://bbs.csdn.net/topics/395627880

新增子類,搜索一圈,發現好像python3繼承上,子類只能繼承父類的私有屬性(私有方法未測試),而沒有權限對父類私有屬性進行賦值或修改,如要進行相關操作還需在父類中創建方法,太麻煩,如果沒必要還是儘量少用私有屬性。以下例子中把__balance私有屬性改爲公有屬性。

class BA(object):
    '''
    銀行帳戶 類
        屬性:
            name  帳戶名
            balance 餘額
        方法:
            SaveMoney   存款
            DrawMoney   取款
            GetBalance  餘額查詢
            Transfer    轉帳
    '''
    # 屬性

    def __init__(self, name, balance):
        self.name = name
        self.balance = balance
    # 存錢

    def SaveMoney(self, money):
        self.balance += money
        print('帳戶 {2} 存入:{0},餘額:{1}'.format(money, self.balance, self.name))
    # 取錢

    def DrawMoney(self, money):
        if self.balance >= money:
            self.balance -= money
            print('帳戶 {2} 取出:{0},餘額:{1}'.format(
                money, self.balance, self.name))
        else:
            print('帳戶 {0} 餘額不足! 取款:{1}, 餘額:{2}'.format(
                self.name, money, self.balance))
    # 獲取帳戶信息

    def GetBankAccount(self):
        return (print('帳戶名: {0}, 餘額: {1}'.format(self.name,self.balance)))
    # 轉帳

    def Transfer(self, ba, money):
        print('轉帳中... ...')
        if self.name == ba.name:
            print('同一帳戶不能進行轉帳!')
        else:
            if self.balance >= money:
                self.DrawMoney(money)
                ba.SaveMoney(money)
                print('轉帳成功!')
            else:
                print('帳戶:{0} 餘額不足! 轉帳 {1}, 餘額:{2}'.format(
                    self.name, money, self.balance))
# 子類


class CreditCard(BA):
    '''
    信用卡 銀行帳戶BA子類
    屬性:
        credit  信用額
        overdraft   透支, 0代表未透支, 1代表已透支
    方法:
        DrawMoney   取款
        CheckCard   信用卡帳戶查詢
    '''

    # 屬性
    def __init__(self, name, balance, credit, overdraft):
        BA.__init__(self, name, balance)
        self.credit = credit
        self.overdraft = overdraft

    # 取款, 改寫父類DrawMoney方法
    def DrawMoney(self, money):
        if self.balance+self.credit >= money:
            if self.balance >= money:
                self.balance -= money
            else:
                self.credit = self.credit+self.balance-money
                self.balance = 0
                self.overdraft = 1
            print('帳戶: {0}, 取款: {1}, 餘額: {2}, 信用額: {3}, 是否透支: {4}'.format(
                self.name,money,self.balance,self.credit,self.overdraft))
        else:
            print('帳戶 {0} 額度不足! 取款金額: {1}, 帳戶餘額:{2}, 信用額: {3}'.format(
                self.name, money, self.balance, self.credit))

    # 信用卡帳戶查詢
    def GetCreditCard(self):
        return (print('帳戶名: {0}, 餘額: {1}, 信用額: {2}, 是否透支: {3}'.format(
            self.name, self.balance, self.credit, self.overdraft)))

# 運行
zhang=BA('zhang',1000)
wang=BA('wang',1000)
#查詢初始帳戶情況
print('銀行帳戶初始信息:')
zhang.GetBankAccount()
wang.GetBankAccount()
#存款操作
print('存款操作.')
zhang.SaveMoney(1000)
#轉帳操作
print('轉帳操作.')
zhang.Transfer(wang,1500)
#取款操作
print('取款操作.')
wang.DrawMoney(2000)
#信用卡帳戶
li = CreditCard('li', 1000, 1000, 0)
print("信用卡帳戶初始信息:")
li.GetCreditCard()
#取款操作
print('信用卡帳戶取款操作.')
li.DrawMoney(500)
li.DrawMoney(700)
li.DrawMoney(1000)
#存款操作
print('信用卡帳戶存款操作.')
li.SaveMoney(1000)
#帳戶查詢
print('帳戶查詢操作.')
li.GetBankAccount()
li.GetCreditCard()

運行結果:
銀行帳戶初始信息:
帳戶名: zhang, 餘額: 1000
帳戶名: wang, 餘額: 1000
存款操作.
帳戶 zhang 存入:1000,餘額:2000
轉帳操作.
轉帳中... ...
帳戶 zhang 取出:1500,餘額:500
帳戶 wang 存入:1500,餘額:2500
轉帳成功!
取款操作.
帳戶 wang 取出:2000,餘額:500
信用卡帳戶初始信息:
帳戶名: li, 餘額: 1000, 信用額: 1000, 是否透支: 0
信用卡帳戶取款操作.
帳戶: li, 取款: 500, 餘額: 500, 信用額: 1000, 是否透支: 0
帳戶: li, 取款: 700, 餘額: 0, 信用額: 800, 是否透支: 1
帳戶 li 額度不足! 取款金額: 1000, 帳戶餘額:0, 信用額: 800
信用卡帳戶存款操作.
帳戶 li 存入:1000,餘額:1000
帳戶查詢操作.
帳戶名: li, 餘額: 1000
帳戶名: li, 餘額: 1000, 信用額: 800, 是否透支: 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章