一、面向对象(组合):

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

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

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

class Game_role:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,role):
role.hp = role.hp - self.ad
print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % \
(self.name,role.name,role.name,self.ad,role.name,role.hp))
class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def attack(self,role1,role2):
role2.hp = role2.hp - self.ad - role1.ad
print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % \
(role1.name,self.name,role2.name,role2.name,role1.ad + self.ad,role2.name,role2.hp))
p1 = Game_role('盖伦',20,500)
p2 = Game_role('剑豪',100,200)
w1 = Weapon('大宝剑',30)
w2 = Weapon('武士刀',80)
p1.attack(p2) # 盖伦调用攻击方法攻击剑豪
p2.attack(p1) # 剑豪调用攻击方法攻击盖伦
w1.attack(p1,p2) # 大宝剑调用攻击方法攻击剑豪 这样不好,动作的发起者应该是人而不是武器
w2.attack(p2,p1) # 武士刀调用攻击方法攻击剑豪 这样不好,动作的发起者应该是人而不是武器

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

    所以,组合就孕育而生。

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

class Gamerole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,role):
role.hp = role.hp - self.ad
print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % \
(self.name,role.name,role.name,self.ad,role.name,role.hp))
def weapon(self,w): # 给人物封装了一个武器属性,这个属性值是Weapon类的一个对象
self.weapon1 = w # 组合
class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def attack(self,role1,role2):
role2.hp = role2.hp - role1.ad - self.ad
print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % \
(role1.name,self.name,role2.name,role2.name,(role1.ad + self.ad),role2.name,role2.hp))
p1 = Gamerole('盖伦',20,500)
p2 = Gamerole('剑豪',100,200)
w1 = Weapon('大宝剑',30)
w2 = Weapon('武士刀',80)
p1.weapon(w1) # 给盖伦封装大宝剑
print(p1.weapon1) # 其实 他就是w1
p2.weapon(w2) # 给剑豪封装武士刀
print(p2.weapon1) # 其实 他就是w2
p1.weapon1.attack(p1,p2) # 盖伦调用大宝剑攻击剑豪
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. Wireshark分析RabbitMQ

    消费者Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  2. RHEL7--linux系统启动流程与故障排除

    一.Linux启动过程 MBR保存着系统的主引导程序(grub 446字节,分区表64字节),启动过程就是把内核加载到内存. 启动的顺序: 1.BIOS: 2.BIOS激活MBR: 3.MBR中的引导 ...

  3. 【传输对象】kafka传递实体类消息

    工具类 负责对象字节数组的相互转换,传输数据用 package com.yq.utils; import java.io.ByteArrayInputStream; import java.io.By ...

  4. 网络压缩论文整理(network compression)

    1. Parameter pruning and sharing 1.1 Quantization and Binarization Compressing deep convolutional ne ...

  5. POJ 3295 Tautology(构造法)

    http://poj.org/problem?id=3295 题意: 判断表达式是否为永真式. 思路: 把每种情况都枚举一下. #include<iostream> #include< ...

  6. Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队

    题目链接:点击传送 D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input ...

  7. hdu 5587 Array 二分

    Array Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem ...

  8. jquery作业 教授答案

    http://www.cnblogs.com/qianjinyan/p/8961086.html 题目要求: 1. 通过jquery动态的创建一个表格,随机生成(id自增,name随机2-3个中文汉字 ...

  9. spring boot 开发 提交form表单出错

    提交表单时,字段有的没有值,springboot 会报错. org.springframework.validation.BindException: org.springframework.vali ...

  10. ngIf 和 template的结合使用

    前提: 当遇到 一个种情况,一个元素中既可以显示 一个字符串变量,也可以显示一个模板 实现: // html <span class="ant-alert-message" ...