python面向对象之类的组合
一、python类的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
二、组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系。
三、例子
模拟英雄联盟写一个游戏人物的类
要求:
(1)创建一个 Game_role的类.
(2)构造方法中给对象封装 name,ad(攻击力),hp(血量).三个属性.
(3)再创建一个武器类Weapen,构造方法中给对象封装 武器名、武器攻击力两个属性
(4)武器类还有一个攻击方法用来完成攻击的功能。
整体实现的是:
实例化一个对象 盖伦,ad为69, hp为500
实例化另个一个对象 亚索 ad为76, hp为400
实例化盖伦的武器: 大宝剑,武器攻击力40
实例化 亚索的武器:武士刀,武器攻击力60
盖伦通过attack方法攻击剑豪,此方法要完成 '谁用什么武器攻击了谁,谁掉了多少血, 还剩多少血'的提示功能.
class Game_role: def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp def use_weapen(self,w):
self.weapen = w class Weapen: def __init__(self,weapen_name,weapen_ad):
self.weapen_name = weapen_name
self.weapen_ad = weapen_ad def attack(self,role1,role2):
role2.hp = role2.hp - role1.ad - self.weapen_ad
msg = '{}用{}攻击了{},{}掉了{}血,还剩{}血'.\
format(role1.name,self.weapen_name,role2.name,role2.name,(role1.ad + self.weapen_ad),role2.hp)
print(msg) # 实例化两个人物对象
p1 = Game_role('盖伦',69,500)
p2 = Game_role('亚索',76,400) #实例化两把武器
w1 = Weapen('大宝剑',50)
w2 = Weapen('孤儿剑',60) # 这样直接调用Weapen的方法虽然可以实现,但是这样实现的话,主体谁攻击谁不能一目了然
w1.attack(p1,p2) #盖伦用大宝剑攻击了亚索,亚索掉了119血,还剩281血 # 所以,这时候就需要用到类的组合,在人物对象中设置一个属性,把武器类的对象传进去,
# 再使用这个属性调用攻击方法,就可以知道谁发起的攻击,一目了然
# 所以此时要在人物类中设置一个方法(use_weapen),用于给人物对象设置武器的属性
# 这样就可以一目了然知道谁是攻击的主体 p1.use_weapen(w1) #把w1这个对象赋给p1的一个属性(weapen) 相当于 p1.weapen = w1
p1.weapen.attack(p1,p2) # 通过p1.weapen调用attack方法 相当于 w1.attcak(p1,p2) # 这样就可以一目了然知道p1是攻击的主体
python面向对象之类的组合的更多相关文章
- python 面向对象 继承 派生 组合
具体参考博客:http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label12 一.面向对象 面向对象:对象与对象之间的相互交互,不可预 ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- python面向对象的继承-组合-02
*面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
- python面向对象-三大特性
python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...
- python面向对象高级:Mixin多重继承
继上一篇学习笔记:python面向对象的继承与多态,本篇就Mixin扩展类的方法写下学习笔记 Mixin Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是 ...
- python面向对象总结
一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...
随机推荐
- (二)阿里云ECS Linux服务器外网无法连接MySQL解决方法(报错2003- Can't connect MySQL Server on 'x.x.x.x'(10038))(自己亲身遇到的问题是防火墙的问题已经解决)
我的服务器买的是阿里云ECS linux系统.为了更好的操作数据库,我希望可以用navicat for mysql管理我的数据库. 当我按照正常的模式去链接mysql的时候, 报错提示: - Can' ...
- Catalan卡特兰数入门
简介 卡特兰数是组合数学中的一种常见数列 它的前几项为: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, ...
- Dynamics 365中自定义工作流活动获取的上下文分析及注意事项
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复244或者20170306可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 关于Skyline沿对象画boundingbox的探讨
先来说说为什么要搞这个?项目中经常遇到的一个操作就是选定对象,以前都是通过Tint设置对象颜色来标识选定对象,但是随着图层中模型增多,模型色彩丰富,会出现选定色与对象颜色对比不明显的情况.因为看到Te ...
- 如何获得MIUI10系统的root超级权限
MIUI10系统有没有办法拥有root超级权限?做开发的人都清楚,android手机有root超级权限,如果手机拥有root相关权限,能够实现更强的功能,举个栗子做开发的人企业的营销部门,使用某些营销 ...
- 支持JSP和Servlet的Web服务器
支持JSP和Servlet的Web服务器 1.Tomcat 服务器 目前非常流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型.轻量级的支持JSP和Servle ...
- python粗谈面向对象(二)
浅谈super() super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象:Python的多继承类是通过mro的方式来保证 ...
- 2星|《IT真相》:日本咨询师面对美国云服务的发展,对日本IT业哀其不争
IT真相-打通IT与商务的通路 I 作者是日本管理咨询师,对日本的IT和金融业了解比较多.书的内容是:作者看到美国的云服务发展壮大,日本IT业没能抓住机会,对日本IT业做了一些批评,比如不思进取,不了 ...
- Django中的信号
信号 Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到. 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生. 这在多处代码和同一事件 ...
- Python开发【内置模块篇】os模块
1.当前路径及路径下的文件 os.getcwd():查看当前所在路径. >>> import os >>> os.getcwd() 'E:\\test' >& ...