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实现简单字典树的方法
Apr 29 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
python中有函数重载吗
May 28 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
Python编写车票订购系统 Python实现快递收费系统
Aug 14 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
mysql 搜索之简单应用
2007/04/27 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
vue实现分页组件
2020/06/16 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
日语专业推荐信
2013/11/12 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
社区党员干部承诺书
2015/05/04 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
python 中的jieba分词库
2021/11/23 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL