[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例:
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 ] 类的组合相关推荐
- python 类组合_python类与对象的组合与继承
1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...
- python类的命名空间与组合
一.类的命名空间 定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性 类的属性有两种形式:静态属性和动态属性 静态属性就是在类中定义的变量 动态属 ...
- python 类继承和组合_python3--类与继承和组合
类和继承:"是一个"关系 我们已经深入探索了继承的机制,这里举个例子来说明它是如何用于模拟真实世界的关系的.从程序员的角度来看,继承是由属性点号运算启动的,由此触发实例.类以及任何 ...
- python 类继承和组合_python类与对象的组合与继承
1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...
- 初学者python笔记(静态属性、类方法、静态方法、类的组合)
文章目录 类的三大方法 1.静态属性 2.类方法.静态方法 3.三大方法总结 类的组合 1.用法分析 2.面试案例分析 本篇文章是上一篇:初学者python笔记(面向对象编程.类与对象)的后续篇,是关 ...
- Python 类的继承和组合
面向对象的编程带来的主要好处之一是代码的复用,实现这种复用的方法之一是通过继承机制. python中解决代码复用的方式:继承和组合. 1 什么是继承 继承是一种创建类的方法,在python中,一个类可 ...
- Python通过类的组合模拟街道红绿灯
一,红绿灯揭示板案例思路 1. 创建Traffic_light红绿灯类 (1)静态属性 : <1> 绿灯时间,<2> 黄灯时间 , <3> 红灯时间, <4& ...
- python turtle红绿灯_【Python】类的组合案例(模拟街道红绿灯)
importtimeimportosfrom colorama importinit,Fore,Back,Style#命令行模式字体颜色初始化 init(autoreset=True)#电子屏类 cl ...
- python 类静态属性_python面向对象之静态属性/静态方法/类方法/组合
继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...
最新文章
- wine安装lingoes
- html前端登录验证码,前端登录页面开发_js生成验证码并验证
- document引用图片的src属性能干嘛_如何实现图片懒加载
- 向量归一化的matlab程序,向量X的归一化及其Matlab简单示例
- os和shutil模块
- burp 代理的时候无法访问https网站
- 使用EasyExcel读取excel文件案例
- 刘济舟:《基于IAST交互式安全测试实践的初步探索》
- 北京3月去哪玩 赏花踏青登山六大推荐
- 2022电大国家开放大学网上形考任务-农业微生物学非免费(非答案)
- 【Mac OS】如何快速复制文件或文件夹路径
- 怎么将abaqus的数据导出_abaqus系列之二维图形导出
- xbox360链接pc_如何在Windows PC上使用Xbox One控制器
- JavaScript——JSON
- Python学习 Day28 JS函数(二)
- JAVA的奇门遁甲--lombok简单使用
- 元宇宙迷思:不管地球达到了怎样的繁荣,那些没有太空航行的未来都是暗淡的
- 【无监督学习和有监督学习的区别】
- 计算机网络英文缩写词
- Excel教程中INDEX和MATCH函数应用
热门文章
- 联想打字必须按FN+数字-fn打字
- Tab Bar Animation
- 学习MongoDB (1) :配置安装
- centos下为firefox安装flash插件的几种方法
- java-在应用中获取spring定义的bean
- gzip格式分析与识别
- 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强
- linux 创建crontab文件位置,[基础教程]linux系统的crontab计划任务添加和删除
- css menu builder,AutoPlay Menu Builder使用教程【图文教程】
- ApacheCN 学习资源汇总 2019.3