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多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python读取指定字节长度的文本方法
Aug 27 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
详解非极大值抑制算法之Python实现
Jun 28 Python
Python列表的索引与切片
Apr 07 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
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
chrome原生方法之数组
2011/11/30 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
js轮播图的插件化封装详解
2017/07/17 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
学生党员思想汇报
2013/12/28 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2014年药店工作总结
2014/11/20 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python