封装

  1. 封装 是面向对象编程的一大特点
  2. 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的  中
  3. 外界 使用  创建 对象,然后 让对象调用方法
  4. 对象方法的细节 都被 封装 在 类的内部

一个对象的 属性 可以是 另外一个类创建的对象

01. 士兵突击

需求

  1. 士兵 许三多 有一把 AK47
  2. 士兵 可以 开火
  3.  能够 发射 子弹
  4.  装填 装填子弹 —— 增加子弹数量

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()

小结

  1. 创建了一个 士兵类,使用到 __init__ 内置方法
  2. 在定义属性时,如果 不知道设置什么初始值,可以设置为 None
  3. 在 封装的 方法内部,还可以让 自己的 使用其他类创建的对象属性 调用已经 封装好的方法

02. 身份运算符

身份运算符用于 比较 两个对象的 内存地址 是否一致 —— 是否是对同一个对象的引用

  • 在 Python 中针对 None 比较时,建议使用 is 判断
运算符 描述 实例
is is 是判断两个标识符是不是引用同一个对象 x is y,类似 id(x) == id(y)
is not is not 是判断两个标识符是不是引用不同对象 x is not y,类似 id(a) != id(b)

is 与 == 区别:

is 用于判断 两个变量 引用对象是否为同一个
== 用于判断 引用变量的值 是否相等

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a
False
>>> b == a
True

  

 

python面向对象封装案例2的更多相关文章

  1. python面向对象封装案例(附:is和==的区别)

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  2. Python面向对象封装案例

    01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 ...

  3. Python面向对象之面向对象封装案例

    面向对象封装案例 封装 封装是面型对象编程的一大特点 面向对象编程的第一步--将属性和方法封装到一个抽象的类中: 外界使用类创建对象,然后让对象调用方法: 对象方法的细节都被封装在类的内部. 一个对象 ...

  4. python-面向对象-04_面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...

  5. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  6. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  7. python 面向对象编程案例01

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例01 class Behave(): def __init__(self,name): se ...

  8. python面向对象-封装-property-接口-抽象-鸭子类型-03

    封装 什么是封装: # 将复杂的丑陋的隐私的细节隐藏到内部,对外提供简单的使用接口 或 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装 1.为了保证关键数据的安全性 2.对外部隐藏内部的实 ...

  9. python面向对象(封装、多态、反射)

    目录 面向对象之封装 @property 面向对象之多态 面向对象之反射 面向对象之封装 含义 将类中的某些名字按照特殊的书写方式"隐藏"起来,不让外界直接调用,目的是为了不然外界 ...

随机推荐

  1. 从ASCII到Unicode再到UTF-8的历史原由

    编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 具体解释: ...

  2. Python 序列化与反序列化

    序列化是为了将内存中的字典.列表.集合以及各种对象,保存到一个文件中(字节流).而反序列化是将字节流转化回原始的对象的一个过程. json库 序列化:json.dumps() 反序列化:json.lo ...

  3. mybatis大于等于小于等于的写法

    第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & &apos; " ...

  4. HTML连载62-固定定位练习、z-index属性

    一.固定定位应用场景 1.练习 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  5. 二、vim的保存文件和退出命令

    vim的保存文件和退出命令   命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中. :w! 强制写文件,即强制覆盖原有 ...

  6. html中多选框变单选框

    就是一个小js,直接上代码 $("input[name='checkboxlist']").each(function () { if (this.checked &&am ...

  7. python3练习100题——022

    为了周末轻松点,多做一些题. 原题链接:http://www.runoob.com/python/python-exercise-example22.html 题目:两个乒乓球队进行比赛,各出三人.甲 ...

  8. Vue 任务清单

    <style> li{ list-style: none; } #root{ width: 400px; min-height: 400px; box-shadow: 0 0 10px # ...

  9. js -- 车牌号对应的归属地js文件

    /*车牌号对应的归属地*/ let cardCallerloc = new Map(); // 北京市(京) cardCallerloc.set("京A", "北京市&q ...

  10. CentOS7下使用C/C++连接MariaDB/MySQL

    前言 连接数据库通常在Java中使用比较多,但是C/C++在Linux下操作数据库也是比较重要的,很多时候都能用得到,在网上查了很多教程,大多写的有些问题,通过自己摸索,终于成功的连接了MariaDB ...