1. # 对象封装:对象的属性可以是另一个类创建的对象
  2. # 案例需求:
  3. # 1、士兵许三多有一把AK47
  4. # 2、士兵用枪射击标靶
  5. # 3、枪能装填和发射子弹
  6.  
  7. class Gun:
  8.  
  9. # 分析:
  10. # 枪的属性:1、枪有型号区分;2、枪要有子弹
  11. # 枪的方法:1、能装填子弹;2、能发射子弹
  12. def __init__(self, model):
  13. self.model = model
  14. self.bullet_count = 0
  15.  
  16. def add_bullet(self, count):
  17. self.bullet_count += count
  18.  
  19. def shoot(self):
  20. self.bullet_count -= 1
  21.  
  22. class Soldier:
  23.  
  24. # 分析:
  25. # 士兵属性:士兵有名字;“可能”会有配枪
  26. # 士兵方法:士兵用枪射击标靶
  27. def __init__(self, name):
  28. self.name = name
  29. self.gun = None # 因为该属性不确定,所以用None
  30.  
  31. def check_gun(self):
  32.  
  33. if self.gun.bullet_count <= 0:
  34. print(F"{self.gun.model} 没有子弹,请装填子弹")
  35.  
  36. print("装弹完成")
  37.  
  38. def fire(self, shoot_count):
  39. if self.gun is None:
  40. print(F"士兵 {self.name} 没有配枪,无法射击!")
  41. return
  42. else:
  43. print(F"士兵 {self.name} 已配备 {self.gun.model}!")
  44. self.gun.add_bullet(shoot_count)
  45. for i in range(shoot_count):
  46. self.gun.shoot()
  47. print(F"{self.name} 用 {self.gun.model} 成功射中标靶\n子弹剩余:{self.gun.bullet_count}")
  48.  
  49. xusanduo = Soldier("许三多")
  50. xusanduo.fire(3) # 士兵 许三多 没有配枪,无法射击!
  51. ak47 = Gun("AK47") # 士兵 许三多 已配备 AK47!
  52. xusanduo.gun = ak47
  53. xusanduo.fire(3) # 许三多 用 AK47 成功射中标靶,子弹剩余:XXX
  54.  
  55. # 总结:Soldier类的属性self.gun的值为Gun类创建的对象“ak47”

python 面向对象:封装---对象的属性可以是另一个类创建的对象的更多相关文章

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

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

  2. Python面向对象封装案例

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

  3. python面向对象封装案例2

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

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

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

  5. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

     1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题 ...

  6. python中利用类创建的对象来保存信息

    在类创建的对象中,一般都是以字典的方式来保存信息 class Student: def __init__(self, name, age, score): self.name = name self. ...

  7. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  8. python中如何统计一个类的实例化对象

    类中的静态变量 需要通过类名.静态变量名 来修改 :通过对象不能修改 python中如何统计一个类的实例化对象?? class Person: #静态变量count,用于记录类被实例化的次数 coun ...

  9. JS高级---实例对象使用属性和方法层层的搜索 (实例对象-->原型对象-->报错)

    实例对象使用属性和方法层层的搜索:   实例对象使用的属性或者方法, 先在实例中查找, 找到了则直接使用: 找不到则, 再去实例对象的__proto__指向的原型对象prototype中找, 找到了则 ...

随机推荐

  1. Spring Boot项目的不同启动方式

    方式一: 直接通过IntelliJ IDEA启动,直接执行Spring Boot项目的main()方法. 方法二: 将项目打包成jar包,首先需要在pom.xml文件的根节点下添加如下配置: < ...

  2. 【Word】自动化参考文献-交叉引用

    第一步:设置参考文献标号 开始-定义新编号格式中,定义参考文献式的方框编号: 这里注意不要把他原来的数字去掉 第二步:选择交叉引用 插入-交叉引用: 第三步:更新标号 如果更新标号,使用右键-更新域. ...

  3. Android: Client-Server communication

    Refer to: http://osamashabrez.com/simple-client-server-communication-in-android/ I was working of an ...

  4. HGAME2021 week4 pwn writeup

    第四周只放出两道题,也不是很难. house_of_cosmos 没开pie,并且可以打got表. 在自写的输入函数存在漏洞.当a2==0时,因为时int类型,这里就会存在溢出.菜单题,但是没有输出功 ...

  5. 模仿写了一个摸鱼APP解决原作者的问题

    前几天见到微博里有人提到摸鱼APP,发现需要在windows store下载才可以使用,文件约100多M左右的样子,自已没有登录微软Store的习惯.想想只有一个介面,没有必要这么大,于是,自已动手写 ...

  6. LuoguP7715 「EZEC-10」Shape 题解

    Content 有一个 \(n\times m\) 的网格,网格上的格子被涂成了白色或者黑色. 设两个点 \((x_1,y_1)\) 和 \((x_2,y_2)\),如果以下三个条件均满足: \(1\ ...

  7. 选课系统V1.0

    tree . . ├── bin │   ├── __init__.py │   └── start.py #启动文件 ├── conf │   ├── __init__.py │   └── set ...

  8. MyBatis学习(二)MyBatis-Statement方式的增删改查

    1.前期准备 项目骨架图如下所示 1.配置conf.xml <?xml version="1.0" encoding="UTF-8" ?> < ...

  9. Spring工具类 非spring管理环境中获取bean及环境配置

    SpringUtils.java import org.springframework.beans.BeansException; import org.springframework.beans.f ...

  10. JAVA判断IP是否是内网IP

    /** * 私有IP: * A类  10.0.0.0-10.255.255.255   * B类  172.16.0.0-172.31.255.255   * C类  192.168.0.0-192. ...