Python面向对象封装操作案例详解 II


Posted in Python onJanuary 02, 2020

本文实例讲述了Python面向对象封装操作。分享给大家供大家参考,具体如下:

目标

士兵突击案例
身份运算符

封装

封装 是面向对象编程的一大特点
面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中
外界 使用 类 创建 对象,然后 让对象调用方法
对象方法的细节 都被 封装 在 类的内部
一个对象的 属性 可以是 另外一个类创建的对象

01. 士兵突击

需求

士兵 许三多 有一把 AK47
士兵 可以 开火
枪 能够 发射 子弹
枪 装填 装填子弹 —— 增加子弹数量
Python面向对象封装操作案例详解 II

1.1 开发枪类

shoot 方法需求

1> 判断是否有子弹,没有子弹无法射击
2> 使用 print 提示射击,并且输出子弹数量

class Gun:

  def __init__(self, model):

    # 枪的型号
    self.model = model
    # 子弹数量
    self.bullet_count = 0

  def add_bullet(self, count):

    self.bullet_count += count

  def shoot(self):

    # 判断是否还有子弹
    if self.bullet_count <= 0:
      print("没有子弹了...")

      return

    # 发射一颗子弹
    self.bullet_count -= 1
    
    print("%s 发射子弹[%d]..." % (self.model, self.bullet_count))

# 创建枪对象
ak47 = Gun("ak47")
ak47.add_bullet(50)
ak47.shoot()

1.2 开发士兵类

假设:每一个新兵 都 没有枪

定义没有初始值的属性

在定义属性时,如果 不知道设置什么初始值,可以设置为 None

None 关键字 表示 什么都没有
表示一个 空对象,没有方法和属性,是一个特殊的常量
可以将 None 赋值给任何一个变量
fire 方法需求

1> 判断是否有枪,没有枪没法冲锋
2> 喊一声口号
3> 装填子弹
4> 射击

class Soldier:

  def __init__(self, name):

    # 姓名
    self.name = name
    # 枪,士兵初始没有枪 None 关键字表示什么都没有
    self.gun = None

  def fire(self):

    # 1. 判断士兵是否有枪
    if self.gun is None:
      print("[%s] 还没有枪..." % self.name)

      return

    # 2. 高喊口号
    print("冲啊...[%s]" % self.name)

    # 3. 让枪装填子弹
    self.gun.add_bullet(50)

    # 4. 让枪发射子弹
    self.gun.shoot()

小结

创建了一个 士兵类,使用到 init 内置方法
在定义属性时,如果 不知道设置什么初始值,可以设置为 None
在 封装的 方法内部,还可以让 自己的 使用其他类创建的对象属性 调用已经 封装好的方法

02. 身份运算符

身份运算符用于 比较 两个对象的 内存地址 是否一致 —— 是否是对同一个对象的引用

在 Python 中针对 None 比较时,建议使用 is 判断
Python面向对象封装操作案例详解 II
is 与 == 区别:
is 用于判断 两个变量 引用对象是否为同一个
== 用于判断 引用变量的值 是否相等

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a 
False
>>> b == a
True

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python脚本实现下载合并SAE日志
Feb 10 Python
python读写ini配置文件方法实例分析
Jun 30 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
Python探索之创建二叉树
Oct 25 Python
python方向键控制上下左右代码
Jan 20 Python
django静态文件加载的方法
May 20 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python操作excel的方法
Aug 16 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
Pandas的Apply函数具体使用
Jul 21 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
Python实现搜索算法的实例代码
Jan 02 #Python
python 实现从高分辨图像上抠取图像块
Jan 02 #Python
python base64库给用户名或密码加密的流程
Jan 02 #Python
python文件处理fileinput使用方法详解
Jan 02 #Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 #Python
Pytorch的mean和std调查实例
Jan 02 #Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 #Python
You might like
php的curl实现get和post的代码
2008/08/23 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
安装docker-compose的两种最简方法
2019/07/30 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
经济信息系毕业生自荐信
2014/06/02 职场文书
法人授权委托书范本
2014/09/17 职场文书
2014年图书室工作总结
2014/12/09 职场文书
学校捐书活动总结
2015/05/08 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang