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实现根据图标提取分类应用程序实例
Sep 28 Python
用Python实现协同过滤的教程
Apr 08 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
python中open函数的基本用法示例
Sep 07 Python
python 创建一维的0向量实例
Dec 02 Python
查看端口并杀进程python脚本代码
Dec 17 Python
python设置代理和添加镜像源的方法
Feb 14 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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
Zerg剧情介绍
2020/03/14 星际争霸
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
python多进程共享变量
2016/04/06 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python实现udp传输图片功能
2020/03/20 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
初婚未育证明
2014/01/15 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
员工考核管理制度
2014/02/02 职场文书
2014年老干部工作总结
2014/11/21 职场文书
如何书写授权委托书?
2019/06/25 职场文书