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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
python3实现字符串操作的实例代码
Apr 16 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Python数据存储之 h5py详解
Dec 26 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
win10安装python3.6的常见问题
Jul 01 Python
django注册用邮箱发送验证码的实现
Apr 18 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通过session防url攻击方法
2014/12/10 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
javascript 动态创建表格
2015/01/08 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
ES6中的Javascript解构的实现
2020/10/30 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python如何快速实现分布式任务
2017/07/06 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
你们项目是如何进行变更控制的
2015/08/26 面试题
21岁生日感言
2014/02/27 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
班训口号大全
2014/06/18 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
计划生育工作汇报
2014/10/28 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
六年级情感作文之500字
2019/10/23 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang