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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python中的闭包详细介绍和实例
Nov 21 Python
简单的Python2.7编程初学经验总结
Apr 01 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
python 常见字符串与函数的用法详解
Nov 23 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
PHP XML备份Mysql数据库
2009/05/27 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
Python入门篇之条件、循环
2014/10/17 Python
python+django快速实现文件上传
2016/10/24 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
英文版区域经理求职信
2013/10/23 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
学校四群教育实施方案
2014/06/12 职场文书
医学专业自荐信
2014/06/14 职场文书
水电工程师岗位职责
2015/02/13 职场文书
病危通知单
2015/04/17 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python