清空对象里面所有的value值_Python 面向对象之组合用法
面向对象组合用法
- 软件重用的重要方式除了继承之外还有另外一种方式,即:组合
- 组合指的是,在一个类中以另一个类的对象作为数据属性,称为类的组合
class Arms: # 定义武器类bullet = 7.62def hit(self,man): # 装备功能pass
class Man: # 定义一个男人role = 'person'def __init__(self,name,arms):self.name = name # 人的名字self.arms = Arms() # 给人添加一个武器
human = Man('exes','ak117')
human.arms.hit('exes')
# human组合了一个武器的对象,可以直接human.arms来使用组合类中的所有方法圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用
from math import piclass Circle:'''定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法'''def __init__(self,radius):self.radius = radiusdef area(self):return pi * self.radius * self.radiusdef perimeter(self):return 2 * pi *self.radiuscircle = Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长class Ring:'''定义了一个圆环类提供圆环的面积和周长的方法'''def __init__(self,radius_outside,radius_inside):self.outsid_circle = Circle(radius_outside)self.inside_circle = Circle(radius_inside)def area(self):return self.outsid_circle.area() - self.inside_circle.area()def perimeter(self):return self.outsid_circle.perimeter() + self.inside_circle.perimeter()ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积
用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系
当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
小练习之人狗大战
class Person: # 定义一个人类role = 'person' # 人的角色属性都是人def __init__(self, name, aggressivity, life_value, money):self.name = name # 每一个角色都有自己的昵称;self.aggressivity = aggressivity # 每一个角色都有自己的攻击力;self.life_value = life_value # 每一个角色都有自己的生命值;self.money = moneydef attack(self,dog):# 人可以攻击狗,这里的狗也是一个对象。# 人攻击狗,那么狗的生命值就会根据人的攻击力而下降dog.life_value -= self.aggressivity
class Dog: # 定义一个狗类role = 'dog' # 狗的角色属性都是狗def __init__(self, name, breed, aggressivity, life_value):self.name = name # 每一只狗都有自己的昵称;self.breed = breed # 每一只狗都有自己的品种;self.aggressivity = aggressivity # 每一只狗都有自己的攻击力;self.life_value = life_value # 每一只狗都有自己的生命值;def bite(self,people):# 狗可以咬人,这里的狗也是一个对象。# 狗咬人,那么人的生命值就会根据狗的攻击力而下降people.life_value -= self.aggressivity
class Weapon:def __init__(self,name, price, aggrev, life_value):self.name = nameself.price = priceself.aggrev = aggrevself.life_value = life_valuedef update(self, obj): #obj就是要带这个装备的人obj.money -= self.price # 用这个武器的人花钱买所以对应的钱要减少obj.aggressivity += self.aggrev # 带上这个装备可以让人增加攻击obj.life_value += self.life_value # 带上这个装备可以让人增加生命值def prick(self, obj): # 这是该装备的主动技能,扎死对方obj.life_value -= 500 # 假设攻击力是500
lance = Weapon('长矛',200,6,100)
kummen= Person('kum',10,1000,600) #创造了一个实实在在的人kummen
ha2 = Dog('二愣子','哈士奇',10,1000) #创造了一只实实在在的狗ha2#kummen独自力战"二愣子"深感吃力,决定穷毕生积蓄买一把武器
if kummen.money > lance.price: #如果kummen的钱比装备的价格多,可以买一把长矛lance.update(kummen) #kummen花钱买了一个长矛防身,且自身属性得到了提高kummen.weapon = lance #kummen装备上了长矛print(kummen.money,kummen.life_value,kummen.aggressivity)print(ha2.life_value)
kummen.attack(ha2) #kummen打了ha2一下
print(ha2.life_value)
kummen.weapon.prick(ha2) #发动武器技能
print(ha2.life_value) #ha2不敌狡猾的人类用武器取胜,血槽空了一半
清空对象里面所有的value值_Python 面向对象之组合用法相关推荐
- python人狗大战游戏_python面向对象-----gt;组合的题目 定一个人狗大战 并且用面向对象的组合知识 - - ITeye博客...
定一个人狗大战 并且用面向对象的组合知识 class Person(object): def __init__(self, name, sex, hp, ad): self.name = name ...
- 可以获取python中输出函数帮助的是_Python帮助函数调试函数 用于获取对象的属性及属性值...
Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...
- python的函数的对象属性_Python帮助函数调试函数 用于获取对象的属性及属性值...
Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...
- python中关系运算符惰性求值_python对象属性惰性取值
python面向对象进阶 在知乎上面看到这个如何让python对象属性具有惰性求值的能力,认真学习了一番,记录一下. __setattr__.__getattr__.__delattr__ class ...
- JS-循环清空对象 判断数据类型的5种常用方法
应用场景:一个页面具有大量数据录入功能,在数据录入保存成功之后,需要刷新页面,即清空所有的数据.因为我把所有的字段定义到一个对象中,所以要清空这个对象,如果字段少,可以直接赋值清空,但是数据多的时候, ...
- es6删除对象的属性_JavaScript删除和清空对象属性
本文介绍一下如何利用JavaScript删除对象中的属性. 这是非常基础简单的操作,可能刚接触JavaScript的朋友会产生一些误操作. 首先看一段代码实例:[JavaScript] 纯文本查看 复 ...
- 微信小程序js数组初始化_微信小程序开发之改变data中数组或对象的某一属性值...
前言:在小程序的开发中,我们在view中便利data中数组或对象时,很多情况下需要在js中动态改变数组或者对象中某一香的属性值. 效果图: 我给大家总结了案例如下: wxml如下: {{item.we ...
- python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
索引(下标) 索引就是下标,下标从0开始,取值时索引所选长度不可以超过其本身. s1 = "python学习" print(s1[0]) # 获取第0个索引所对应的的元素. pri ...
- html 表单内容怎么获取不到,jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办?...
jquery中formdate一直获取不到对象中的[0]的值 包括本身也是一个空的数据怎么办? 再做一个前台的ajax方法 查网上用formdate方法上传.可是进了接口之后一直在控制台获取不到for ...
最新文章
- [Serializable]序列化一句话理解
- 《Fortran95程序设计》(彭国伦)
- 【Java 8 新特性】Java Comparator.nullsLast | 将空元素被认为大于非空元素
- 转:移动建站工具(一):分秒钟将Web网站移动化
- js模仿QQ头像资料卡显示与隐藏
- 软考一些可能有用的链接
- Static Asynchronous Component Misuse Detection for Android Applications
- DurIAN模型介绍
- [Java]使用ArrayList类来把54张扑克牌发给3位玩家各17张,剩下3张是底牌
- 可视化建站系统是什么?
- 惠普HP Smart Tank 516 打印机驱动
- mybatis入门学习(九) -DB环境切换、使用注解、事务提交、获取自增ID、多参数传参、鉴别器、内置参数、批量写入、Oracle字段无法插入 null 值
- [7]能不能说一说浏览器缓存
- C语言-volatile关键字
- Linux ps 命令使用介绍
- 福师大计算机考研专硕,福师大性价比最高的管理类专硕!录取分数低,上岸比较容易!...
- 四川农业大学计算机专业答辩,四川农业大学远程教育2016年下半年本科论文答辩安排及注意事项...
- 大侠是怎样练成的-周昆
- [HFCTF 2021 Final]easyflask
- 照片人像模糊怎么调?两分钟教会你
热门文章
- netcore之json序列化
- win10双网卡冗余的几种方法
- python3.3.2_Python代码2转3、3转2的方法
- python torchvision_pip install torchvision error:安装版本为0.4.1的torch后继续安装torchvision报错...
- java程序设计比赛心得体会_对Java程序设计的感想.doc
- windows bat脚本实现快速配置JDK 环境变量
- Open browser failed!! Please check if you have installed the browser correct
- win10安装Visual Studio Code(VSCode)
- C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
- redis 中一个字段 修改map_Redis中bitmap的妙用