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