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根据出生年份简单计算生肖的方法
Mar 27 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
名片管理系统python版
Jan 11 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
np.dot()函数的用法详解
Jan 17 Python
Python3 集合set入门基础
Feb 10 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 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 list()函数的详解
2013/06/05 PHP
header导出Excel应用示例
2014/01/24 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
php经典算法集锦
2015/11/14 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
简单学习vue指令directive
2016/11/03 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
护理专业毕业生自荐信范文
2014/01/05 职场文书
协议书样本
2014/04/23 职场文书
小学生优秀评语
2014/12/29 职场文书
中学生自我评价2015
2015/03/03 职场文书
正规欠条模板
2015/07/03 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
浅析MySQL如何实现事务隔离
2021/06/26 MySQL