一、面向对象(组合):

    定义:给一个类的对象封装一个属性,这个属性是另一个类的对象。

    意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系。

  人物使用武器攻击另一个人物:

  1. class Game_role:
  2. def __init__(self,name,ad,hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6. def attack(self,role):
  7. role.hp = role.hp - self.ad
  8. print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % \
  9. (self.name,role.name,role.name,self.ad,role.name,role.hp))
  10. class Weapon:
  11. def __init__(self,name,ad):
  12. self.name = name
  13. self.ad = ad
  14. def attack(self,role1,role2):
  15. role2.hp = role2.hp - self.ad - role1.ad
  16. print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % \
  17. (role1.name,self.name,role2.name,role2.name,role1.ad + self.ad,role2.name,role2.hp))
  18. p1 = Game_role('盖伦',20,500)
  19. p2 = Game_role('剑豪',100,200)
  20. w1 = Weapon('大宝剑',30)
  21. w2 = Weapon('武士刀',80)
  22. p1.attack(p2) # 盖伦调用攻击方法攻击剑豪
  23. p2.attack(p1) # 剑豪调用攻击方法攻击盖伦
  24. w1.attack(p1,p2) # 大宝剑调用攻击方法攻击剑豪 这样不好,动作的发起者应该是人而不是武器
  25. w2.attack(p2,p1) # 武士刀调用攻击方法攻击剑豪 这样不好,动作的发起者应该是人而不是武器

  但是动作的发起者变成了武器,而不是人物,这样就很不合理啦!

    所以,组合就孕育而生。

  组合的好处:就是能够把一个类的对象与另一个类的对象产生关系,让一个类与另一个类产生关系

  1. class Gamerole:
  2. def __init__(self,name,ad,hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6. def attack(self,role):
  7. role.hp = role.hp - self.ad
  8. print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % \
  9. (self.name,role.name,role.name,self.ad,role.name,role.hp))
  10. def weapon(self,w): # 给人物封装了一个武器属性,这个属性值是Weapon类的一个对象
  11. self.weapon1 = w # 组合
  12. class Weapon:
  13. def __init__(self,name,ad):
  14. self.name = name
  15. self.ad = ad
  16. def attack(self,role1,role2):
  17. role2.hp = role2.hp - role1.ad - self.ad
  18. print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % \
  19. (role1.name,self.name,role2.name,role2.name,(role1.ad + self.ad),role2.name,role2.hp))
  20. p1 = Gamerole('盖伦',20,500)
  21. p2 = Gamerole('剑豪',100,200)
  22. w1 = Weapon('大宝剑',30)
  23. w2 = Weapon('武士刀',80)
  24. p1.weapon(w1) # 给盖伦封装大宝剑
  25. print(p1.weapon1) # 其实 他就是w1
  26. p2.weapon(w2) # 给剑豪封装武士刀
  27. print(p2.weapon1) # 其实 他就是w2
  28. p1.weapon1.attack(p1,p2) # 盖伦调用大宝剑攻击剑豪
  29. p2.weapon1.attack(p2,p1) # 剑豪调用大宝剑攻击盖伦

《Python》 面向对象初识(组合)的更多相关文章

  1. Python()- 面向对象的组合用法

    面向对象的组合用法 一个类中以另一个类的对象作为数据属性(一个类中引用另一个类的对象)一种 "有" 的关系: 比如:定义 1个人类 & 1个武器类 然后 张三 有 枪 李四 ...

  2. Python面向对象(组合、菱形继承、多态)

    今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事  1.创造空对象  2.触发对象下的__init__方法,然后将p连同参数一同传给init  ...

  3. python面向对象:组合、封装、property装饰器、多态

    一.组合二.封装三.property装饰器四.多态 一.组合 ''' 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. ...

  4. python 面向对象-初识

    一.分类 1.面向过程 2.面向函数 3.面向对象 二.类和对象 1.宏关 类是抽象的,对象是具体的 2.实例化 类->对象 3.类的作用 1)实例化成对象 实例化的过程,创建self对象,调用 ...

  5. 第四百一十三节,python面向对象,组合、类创建的本质、依赖注入

    组合 组合举例组合就是多个类,或者若干类联合起来完成一个任务下面举例两个类联合起来完成一个任务为了降低代码的耦合度,我们一般不会在一个类里实例化另外一个类,都是将一个类在外面实例化后传参到另外一个来这 ...

  6. Python面向对象之组合

    # 组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象. class GameRole: def __init__(self, name, ad, hp): self.name = name ...

  7. Python面向对象 | 初识

    一.面向对象编程 类 : 具有相同属性和技能的一类事物 对象: 就是对一个类的具体的描述 实例化:类——>对象的过程 使用面向对象的好处: 使得代码之间的角色关系更加明确 增强了代码的可扩展性 ...

  8. Python中面向对象初识到进阶

    面向对象初识到进阶 # 面向对象结构: # class 类名: # def __init__(self,参数1,参数2): # self.对象的属性1 = 参数1 # self.对象的属性2 = 参数 ...

  9. 初识python面向对象

    一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...

随机推荐

  1. 如何替换vi的配色方案

    答: 1.获取配色方案 git clone git://github.com/altercation/vim-colors-solarized.git ~/.vim/bundle/vim-colors ...

  2. js 注意点

    1.var // 反例 myname = "global"; // 全局变量 function func() { alert(myname); // "undefined ...

  3. 【Hostname】Linux修改主机名称

    环境:CentOS 6.5 方式一: 1.修改hosts文件 vi /etc/hosts 将本机ip地址后面的hostname改掉 2.修改network文件 vi /etc/sysconfig/ne ...

  4. require的shim解释

    通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim,shim解释起来也比较难理解,shim直 ...

  5. require的压缩命令

    注意点 node r.js -o baseUrl=js name=main out=js/build.js paths.jquery=empty: 注:baseUrl是可选的 取决于页面是否有写这个入 ...

  6. MOOC_Java进阶_翁恺讲_第三周题

    package mooc_java进阶_d3周题; /** * 没有使用HashMap */ import java.util.ArrayList; import java.util.Scanner; ...

  7. JS post 数组道后台

    $("#aSave").click(function () { if ($("#TaskName").val() == "") { aler ...

  8. DataTable转化成实体对象

    /// <summary> /// The data extension. /// </summary> public static class DataExtension { ...

  9. Python day5_tuple元祖的常见方法1_笔记

    # 初识元祖# 1.元祖的一级元素不能被修改,增加,删除,但可以查看,del tu[0]错的# 2.元祖最后一个元素后注意加‘,’,并没有区别,只是为了和方法中元素区别开li=[11,22,33,44 ...

  10. angular5中使用echart的方法

    注意两点安装的版本 安装好后可以参照echart的官网使用 1.实现package.json中安装这两个包 2.index.html中引入 3.在appModule中添加 然后再html中就可以这么使 ...