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 list语法学习(带例子)
Nov 01 Python
Python中字符串对齐方法介绍
May 21 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Python 爬虫学习笔记之单线程爬虫
Sep 21 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
python处理两种分隔符的数据集方法
Dec 12 Python
如何用python写一个简单的词法分析器
Dec 18 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python根据多个文件名批量查找文件
Aug 13 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
matlab xlabel位置的设置方式
May 21 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
js tab效果的实现代码
2009/12/26 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
Python中查看文件名和文件路径
2017/03/31 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
数字漫画:comiXology
2020/06/13 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
是否有自动比较结构的方法
2015/06/03 面试题
社区八一活动方案
2014/02/03 职场文书
教师学习培训邀请函
2014/02/04 职场文书
保证书格式范文
2014/04/28 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers