首先,使用面向对象是一个人狗大战的实例:

class Person:def __init__(self, name, hp, aggr, sex):self.name = nameself.hp = hpself.aggr = aggrself.sex = sexdef hit(self, dog):dog.hp -= self.aggrprint('\033[31;1m%s被打,掉了%s的血.\033[0m' %(dog.name, self.aggr))class Dog:def __init__(self, name, hp, aggr, kind):self.name = nameself.hp = hpself.aggr = aggrself.kind = kinddef bite(self, person):person.hp -= self.aggrprint('\033[31;1m%s被咬,掉了%s的血.\033[0m' %(person.name, self.aggr))per = Person('kk', 100, 2, 'male')
dog = Dog('teddy', 200, 5, 'teddy')per.hit(dog)
dog.bite(per)

这时,为了增加游戏的趣味性,我们可以给人物添加一个武器,并且人物可以使用武器发大招:

  • 新增武器类;
  • 武器必须给人类装配上才能用;
  • 大招是武器发动的,因此大招应该是武器的一个方法
  • 人类拿着武器发起大招,应该是: 人类.武器.大招

接下来,就将描述转换为代码:

class Person:'''人类'''def __init__(self, name, hp, aggr, sex):self.name = nameself.hp = hpself.aggr = aggrself.sex = sexself.price = 0  # 设置人类初始金钱def hit(self, dog):dog.hp -= self.aggrprint('\033[31;1m%s被打,掉了%s的血.\033[0m' % (dog.name, self.aggr))def get_weapon(self, weapon):'穿戴武器'if self.price > weapon.price:  # 购买武器self.price -= weapon.priceself.weapon = weapon  # 带上武器class Dog:'''狗类'''def __init__(self, name, hp, aggr, kind):self.name = nameself.hp = hpself.aggr = aggrself.kind = kinddef bite(self, person):person.hp -= self.aggrprint('\033[31;1m%s被咬,掉了%s的血.\033[0m' % (person.name, self.aggr))class Weapon:def __init__(self, name, aggr, njd, price):self.name = nameself.aggr = aggrself.njd = njdself.price = pricedef dazhao(self, dog):if self.njd > 0:dog.hp -= self.aggr * 2print('\033[33;1m【%s】使用武器【%s】,发大招伤害【%s】\033[0m' % (dog.name, self.name, self.aggr * 2))per = Person('kk', 100, 2, 'male')
dog = Dog('teddy', 200, 5, 'teddy')per.hit(dog)
dog.bite(per)
hit_dog = Weapon('dbg', 20, 3, 998)  # 实例化一个武器对象-打狗棒
per.price += 998  # 冲钱才能变强
per.get_weapon(hit_dog)  # 人物装备上武器
per.weapon.dazhao()  # 人物使用武器发大招

在上面的这个例子中,我们已经使用到了类的组合。

当人物需要发大招的时候,人物通过 get_weapon 方法绑定武器,self.weapon 就是武器,而大招是武器中的一个方法,因此使用:
人物.武器.大招()  这样的调用关系才能使用大招。

组合就是一个对象的属性值是另一个类的对象

练习:
    使用类的组合创建讲师类,有两个类 Teacher 和 brith 类

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author: hkeyclass Teacher:def __init__(self, name, age, brith):self.name = nameself.age = ageself.brith = brithclass Brith:def __init__(self, year, month, day):self.year = yearself.month = monthself.day = daybrith = Brith(1998, 10, 23)hkey = Teacher('hkey', 20, brith)print(hkey.brith.year)
print(hkey.brith.month)

练习:组合

转载于:https://www.cnblogs.com/hukey/p/9884679.html

[ python ] 类的组合相关推荐

  1. python 类组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  2. python类的命名空间与组合

    一.类的命名空间 定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性 类的属性有两种形式:静态属性和动态属性 静态属性就是在类中定义的变量 动态属 ...

  3. python 类继承和组合_python3--类与继承和组合

    类和继承:"是一个"关系 我们已经深入探索了继承的机制,这里举个例子来说明它是如何用于模拟真实世界的关系的.从程序员的角度来看,继承是由属性点号运算启动的,由此触发实例.类以及任何 ...

  4. python 类继承和组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  5. 初学者python笔记(静态属性、类方法、静态方法、类的组合)

    文章目录 类的三大方法 1.静态属性 2.类方法.静态方法 3.三大方法总结 类的组合 1.用法分析 2.面试案例分析 本篇文章是上一篇:初学者python笔记(面向对象编程.类与对象)的后续篇,是关 ...

  6. Python 类的继承和组合

    面向对象的编程带来的主要好处之一是代码的复用,实现这种复用的方法之一是通过继承机制. python中解决代码复用的方式:继承和组合. 1 什么是继承 继承是一种创建类的方法,在python中,一个类可 ...

  7. Python通过类的组合模拟街道红绿灯

    一,红绿灯揭示板案例思路 1. 创建Traffic_light红绿灯类 (1)静态属性 : <1> 绿灯时间,<2> 黄灯时间 , <3> 红灯时间, <4& ...

  8. python turtle红绿灯_【Python】类的组合案例(模拟街道红绿灯)

    importtimeimportosfrom colorama importinit,Fore,Back,Style#命令行模式字体颜色初始化 init(autoreset=True)#电子屏类 cl ...

  9. python 类静态属性_python面向对象之静态属性/静态方法/类方法/组合

    继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...

最新文章

  1. wine安装lingoes
  2. html前端登录验证码,前端登录页面开发_js生成验证码并验证
  3. document引用图片的src属性能干嘛_如何实现图片懒加载
  4. 向量归一化的matlab程序,向量X的归一化及其Matlab简单示例
  5. os和shutil模块
  6. burp 代理的时候无法访问https网站
  7. 使用EasyExcel读取excel文件案例
  8. 刘济舟:《基于IAST交互式安全测试实践的初步探索》
  9. 北京3月去哪玩 赏花踏青登山六大推荐
  10. 2022电大国家开放大学网上形考任务-农业微生物学非免费(非答案)
  11. 【Mac OS】如何快速复制文件或文件夹路径
  12. 怎么将abaqus的数据导出_abaqus系列之二维图形导出
  13. xbox360链接pc_如何在Windows PC上使用Xbox One控制器
  14. JavaScript——JSON
  15. Python学习 Day28 JS函数(二)
  16. JAVA的奇门遁甲--lombok简单使用
  17. 元宇宙迷思:不管地球达到了怎样的繁荣,那些没有太空航行的未来都是暗淡的
  18. 【无监督学习和有监督学习的区别】
  19. 计算机网络英文缩写词
  20. Excel教程中INDEX和MATCH函数应用

热门文章

  1. 联想打字必须按FN+数字-fn打字
  2. Tab Bar Animation
  3. 学习MongoDB (1) :配置安装
  4. centos下为firefox安装flash插件的几种方法
  5. java-在应用中获取spring定义的bean
  6. gzip格式分析与识别
  7. 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强
  8. linux 创建crontab文件位置,[基础教程]linux系统的crontab计划任务添加和删除
  9. css menu builder,AutoPlay Menu Builder使用教程【图文教程】
  10. ApacheCN 学习资源汇总 2019.3