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冒泡排序简单实现方法
Jul 09 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Pycharm学习教程(1) 定制外观
May 02 Python
python先序遍历二叉树问题
Nov 10 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Tensorflow卷积神经网络实例
May 24 Python
Python之列表实现栈的工作功能
Jan 28 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
使用Python实现音频双通道分离
Dec 25 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JS location几个方法小姐
2008/07/09 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
小程序实现多选框功能
2018/10/30 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python __slots__的使用方法
2020/11/15 Python
PyQt实现计数器的方法示例
2021/01/18 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
飘柔洗发水广告词
2014/03/14 职场文书
公司总经理任命书
2014/06/05 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书