# 对象封装:对象的属性可以是另一个类创建的对象
# 案例需求:
# 1、士兵许三多有一把AK47
# 2、士兵用枪射击标靶
# 3、枪能装填和发射子弹 class Gun: # 分析:
# 枪的属性:1、枪有型号区分;2、枪要有子弹
# 枪的方法:1、能装填子弹;2、能发射子弹
def __init__(self, model):
self.model = model
self.bullet_count = 0 def add_bullet(self, count):
self.bullet_count += count def shoot(self):
self.bullet_count -= 1 class Soldier: # 分析:
# 士兵属性:士兵有名字;“可能”会有配枪
# 士兵方法:士兵用枪射击标靶
def __init__(self, name):
self.name = name
self.gun = None # 因为该属性不确定,所以用None def check_gun(self): if self.gun.bullet_count <= 0:
print(F"{self.gun.model} 没有子弹,请装填子弹") print("装弹完成") def fire(self, shoot_count):
if self.gun is None:
print(F"士兵 {self.name} 没有配枪,无法射击!")
return
else:
print(F"士兵 {self.name} 已配备 {self.gun.model}!")
self.gun.add_bullet(shoot_count)
for i in range(shoot_count):
self.gun.shoot()
print(F"{self.name} 用 {self.gun.model} 成功射中标靶\n子弹剩余:{self.gun.bullet_count}") xusanduo = Soldier("许三多")
xusanduo.fire(3) # 士兵 许三多 没有配枪,无法射击!
ak47 = Gun("AK47") # 士兵 许三多 已配备 AK47!
xusanduo.gun = ak47
xusanduo.fire(3) # 许三多 用 AK47 成功射中标靶,子弹剩余:XXX # 总结: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. react中在hooks方法useEffect中加载异步数据

    useEffect( ()=>{ (async function getPipeList(value:any) { let result= await GetPipeList(value); s ...

  2. jQuery遍历的几种方式

    一.jQuery对象遍历 1 <script type="text/javascript" src="js/jquery-3.4.1.js">< ...

  3. 【Java基础】transient关键字

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...

  4. 使用AOP思想实现日志的添加

    //1.创建日志表syslog------->创建日志的实体类--------->在web.xml中配置监听 <listener>     <listener-class ...

  5. springmvc资源文件访问不到,undefined,jsp引用js文件目录

    资源访问失败: 该模块下springmvc.xml文件中添加配置: <mvc:resources mapping="/js/**" location="/js/&q ...

  6. [BUUCTF]REVERSE——rsa

    rsa 附件 题目是rsa,首先了解一下什么是rsa加密,具体的看这个文章 首先大概介绍下RSA加密解密 RSA加密是对明文的E次方后除以N后求余数的过程 公钥n = p * q,其中p和q是两个大素 ...

  7. Jetpack Compose的Modifier顺序问题

    一:前言 困惑起源于这段代码 Composable.clickable(点击1).clickable(点击2).size(100.dp).size(200.dp){ ............... } ...

  8. Python小组作业:基于yolov5的口罩佩戴识别

    Python老师给了三个小组项目:1.自身专业问题 2.人工智能 3.游戏或者小工具 提前告知了,写游戏不好拿高分,小工具又不能展示自己的水平.大一刚来也没碰到什么专业问题,于是经过讨论,决定了做人工 ...

  9. CF656C Without Text 题解

    Content 输入一个字符串 \(s\),遍历每一个字符,如果这个字符是小写字母,那么答案就加上这个字母的字母表序:否则,如果这个字符是小写字母,那么答案就减去这个字母的字母表序.求最后的答案. 字 ...

  10. 大型网站高可用架构之CAP原理

    在讨论高可用数据服务架构之前,必须先讨论的一个话题是,为了保证数据的高可用,网站通常会牺牲另一个也很重要的指标:数据一致性. CAP原理认为,一个提供数据服务的存储系统无法同时满足数据一致性.数据可用 ...