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中随机函数random用法实例
Apr 30 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
深入源码解析Python中的对象与类型
Dec 11 Python
详解python调度框架APScheduler使用
Mar 28 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
Python中Threading用法详解
Dec 27 Python
python爬虫超时的处理的实例
Dec 19 Python
利用python求积分的实例
Jul 03 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
python爬虫请求头的使用
Dec 01 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 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 常用字符串函数总结
2008/03/15 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
JS日历 推荐
2006/12/03 Javascript
对比分析json及XML
2014/11/28 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
Python中的匿名函数使用简介
2015/04/27 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
医学检验专业大学生求职信
2013/11/18 职场文书
中专生的个人自我评价
2013/12/11 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
校园安全标语
2014/06/07 职场文书
诚信承诺书
2015/01/19 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
常用的Python代码调试工具总结
2021/06/23 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
Python超详细分步解析随机漫步
2022/03/17 Python
PYTHON InceptionV3模型的复现详解
2022/05/06 Python