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中MySQLdb模块用法实例
Nov 10 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
在Django的session中使用User对象的方法
Jul 23 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
Python常见数据类型转换操作示例
May 08 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
python tkinter canvas使用实例
Nov 04 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 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的控制语句
2006/10/09 PHP
php浏览历史记录的方法
2015/03/10 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python中super关键字用法实例分析
2015/05/28 Python
用Python抢过年的火车票附源码
2015/12/07 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
详解python3中zipfile模块用法
2018/06/18 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
Python logging模块handlers用法详解
2020/08/14 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
服装厂厂长岗位职责
2013/12/27 职场文书
四年级科学教学反思
2014/02/10 职场文书
软件项目开发计划书
2014/05/01 职场文书
安全标语大全
2014/06/10 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2015年调度员工作总结
2015/04/30 职场文书
保护地球的宣传语
2015/07/13 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书