一、面向对象(组合):

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

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

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

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. HDU3085(双向BFS+曼哈顿距离)题解

    Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. POJ3436 ACM Computer Factory(最大流/Dinic)题解

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8944   Accepted: 3 ...

  3. Leading and Trailing(数论/n^k的前三位)题解

    Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...

  4. Linux环境下一些有用但不常见的命令

    Linux环境下一些有用但不常见的命令 1.获取显卡硬件信息 lspci -vnn | grep VGA -A 12 (若是n卡,则用glxinfo) 2.执行*.sh文件 常见的执行*.sh文件当属 ...

  5. 论文笔记——ThiNet: A Filter Level Pruning Method for Deep Neural Network Compreesion

    论文地址:https://arxiv.org/abs/1707.06342 主要思想 选择一个channel的子集,然后让通过样本以后得到的误差最小(最小二乘),将裁剪问题转换成了优化问题. 这篇论文 ...

  6. animate动画回调函数

    对非动画的实现排队,比如这个css()是要放在回调函数里才能,让前面的动画执行完成后在进行实现 $('button').click(function(event) { $(this).next().a ...

  7. 数组类型的退化Decay

    Decay即数组在某些情况下将退化为指针. 测试代码: #include <iostream> #include <typeinfo> template <typenam ...

  8. python 等比数列

    def is_geometric(li): : return True # Calculate ratio ratio = li[]/]) # Check the ratio of the remai ...

  9. [设计模式][C++]单例模式

    参考:http://blog.csdn.net/hackbuteer1/article/details/7460019 单例模式意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有 ...

  10. [ios][swift]文本框UITextField用法

    参考:http://www.hangge.com/blog/cache/detail_530.html