转载自python面向对象编程示例---银行账号 | 酷python​www.coolpython.net

在最初接触面向对象编程时,你会感到有些不习惯,但这种编程范式却有助于我们思考问题,前提是你准确的理解面向对象这四个字的含义。今天,我以银行账户为例向你展示如何利用面向对象的编程方法来编写一个银行账户,这个过程中,你将感受到面向对象编程与面向过程编程的不同。

1. 属性与方法

我需要一个银行账户的类,我将其命名为BankAccount, 它应该有如下的属性:用户姓名(username)

账号(card_no)

余额(balance)

这个类还应该有几个方法:存钱(deposit)

取钱(withdrawal)

转账(transfer)

查看操作记录(history)

2. 业务分析

在取钱时,如果账户余额小于所取金额,那么要提示用户余额不足,在转账的时候同样如此。在存钱,取钱,转账时,都必须将业务操作记录保存到一个列表中,查看历史记录时,遍历这个列表,这里我不考虑查询历史记录的时间范围。

3. 代码实现

3.1 定义类

class BankAccount(object):

def __init__(self, username, card_no, balance):

self.username = username # 用户姓名

self.card_no = card_no # 账号

self.balance = balance # 余额

self.history_lst = [] # 历史操作记录

def deposit(self, amount):

'''存钱:param amount::return:'''

pass

def withdrawal(self, amount):

'''取钱:param amount::return:'''

pass

def transfer(self, another, amount):

'''转账:param another::param amount::return:'''

pass

def history(self):

'''历史操作记录:return:'''

pass

如果业务分析已经很透彻,你可以像我这样一次性将类的全部属性和方法都写好,之后逐步完善,这样做事井井有条,不至于丢三落四。不过你很难一次性想清楚所有细节,因此在编码过程中,还会逐渐补充。

3.2 实现存钱方法

不论进行何种操作,金额都必须是大于0的,因此,我需要一个判断金额是否合法的方法

@classmethod

def is_amount_legitimate(amount):

'''判断金额是否合法:return:'''

if not isinstance(amount, (float, int)):

return False

if amount <= 0:

return False

return True

由于这个方法无需访问实例属性,因此我把它定义为类方法,每一次操作,都需要记录,记录里必然包括操作发生的时间,因此还需要一个获取当前时间的方法

@classmethod

def _get_current_time(cls):

now = datetime.now()

current_time = now.strftime('%Y-%m-%d%H:%M:%S')

return current_time

现在,来实现存钱方法

def deposit(self, amount):

'''存钱:param amount::return:'''

if not self.is_amount_legitimate(amount):

print('金额不合法')

return

self.balance += amount

3.3 实现取钱

转账,都需要判断操作的金额是否小于等于账户余额,看来,我需要一个方法来完成这件事情

def withdrawal(self, amount):

'''取钱:param amount::return:'''

if not self.is_amount_legitimate(amount):

print('金额不合法')

return

self.balance -= amount

log = "{operate_time}取出金额{amount}".format(operate_time=self._get_current_time(), amount=amount)

self.history_lst.append(log)

3.4 实现转账

此前,我只定义了转账函数,还缺少一个接收转账的函数,这两个函数一起实现

def transfer(self, another, amount):

'''转账:param another::param amount::return:'''

self.balance -= amount

another.accept_transfer(self, amount)

log = '{operate_time}向{username}转账{amount}'.format(operate_time=self._get_current_time(),

username=another.username,

amount=amount)

self.history_lst.append(log)

def accept_transfer(self, another, amount):

'''接收转账:param another::param amount::return:'''

self.balance += amount

log = '{operate_time}收到{username}转来的{amount}'.format(operate_time=self._get_current_time(),

username=another.username,

amount=amount)

self.history_lst.append(log)

3.5 查看历史操作记录

def history(self):

'''历史操作记录:return:'''

for log in self.history_lst:

print(log)

3.6 测试

def test():

account_1 = BankAccount('小明', '248252543', 4932.13)

account_2 = BankAccount('小红', '429845363', 3211.9)

account_1.deposit(400) # 存钱

account_1.withdrawal(300) # 取钱

account_1.transfer(account_2, 1024) # 转账

account_1.history() # 查询历史操作记录

account_2.history()

if __name__ == '__main__':

test()

测试输出结果

2020-01-09 19:48:01 存入金额400

2020-01-09 19:48:01取出金额300

2020-01-09 19:48:01向小红转账1024

2020-01-09 19:48:01收到小明转来的1024

python通过银行卡号_python面向对象编程实例---银行账号相关推荐

  1. python 鱼骨图_python面向对象编程,鱼骨图分析法

    一.面向对象编程 ​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么.后干什么.再干什么.然后干什么-- 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化, ...

  2. python的面向对象编程项目案例_python面向对象编程实例ants vs bees

    [实例简介] 本实例为用python语言编写,以python的面向对象.列表.局部变量等部分知识为基础,内容类似于popcap的植物大战僵尸的游戏项目 本实例为UC berkeley课程CS61A的p ...

  3. python编程语言继承_Python 面向对象编程——继承和多态

    <基本定义> 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...

  4. python串口通信_python串口编程实例 - 全文

    Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其 ...

  5. js 面向对象编程实例

    当我们在写js代码的时候,总是会想能否和java一样面向对象去编程,让人更易维护以及代码的分离.下面举一例说明: jsp页面如下 <!DOCTYPE html> <html>& ...

  6. python和C语言混合编程实例

    转载自:http://www.jb51.net/article/50633.htm 这篇文章主要介绍了python和C语言混合编程实例,文中开发了一个tcp端口ping程序来介绍混合编程,需要的朋友可 ...

  7. python的类和实例_Python 面向对象编程——类和实例

    1面向对象编程 面向对象编程: 面向对象编程--Object OrientedProgramming OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...

  8. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

  9. python对象编程例子-Python 面向对象编程实例讲解

    如果你没有任何以往的经验与面向对象(OO)编程,你可能想咨询或至少某种教程的入门课程,所以,你必须掌握的基本概念. 然而,这里是小推出的面向对象编程(OOP)给你带来更好的学习速度: OOP的术语概述 ...

最新文章

  1. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码
  2. python qq邮箱 群发
  3. python使用作为转义字符_当需要在字符串中使用特殊字符时, Python使用()作为转义字符。...
  4. 字段类型 sqoop_数据迁移工具Sqoop
  5. php ip获取邮政编码,php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法...
  6. String 和 InputStream 互转方式
  7. 怎么升级Android Studio版本,Android studio 2 版本升级 Android studio 3 版本注意事项
  8. c语言函数制作,C语言库函数制作方法
  9. kotlin的Viewpage2+Fragment的简单使用(setUserVisibleHint方法过时)
  10. 怎么禁用计算机usb驱动程序,win7如何禁止USB自动安装驱动程序
  11. closest()方法简介
  12. linux mint 使用软件管理器安装软件
  13. java中int不兼容_mvn install命令时,一直报错:不兼容的类型 [ERROR] 找到: java.lang.Object [ERROR] 需要: int...
  14. Java自定义变换产生摘要数据
  15. 让汉字快速匹配拼音、你不知道的快速方法
  16. 如何利用UDP组播实现海康网络摄像机(IPC)的自动探测【源码】【监控】【录播】【NVR】【ONVIF】
  17. 常见网站劫持案例及解析
  18. Python excel提取表格信息整理到word中
  19. websocket 并发_1230万个并发WebSocket
  20. 解决 c#连接Oracle 提示system.data.oracleclient 需要 oracle 客户端软件 8.1.7 或更高版本

热门文章

  1. windows下读取Linux分区软件
  2. Android studio 启动模拟器报错-Turn off Hyper-V
  3. Excell表格的技巧
  4. 企业物资管理系统的设计与实现(ASP.NET,SQL)
  5. Sitara™处理器的产品开发路线图
  6. Latex基于longtable环境设置跨页表格,且固定表格宽度、支持跨页标题显示
  7. 双能量减影数字化胸部摄片的发展
  8. git submodule用法(超简单体验)
  9. 全国计算机一级取代,全国计算机等级考试如何替代自考科目?
  10. php echarts官网,Echarts用法详细介绍