python_面向对象——对象间的组合关系
# 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行。
class Dog: #狗
def __init__(self,name,dog_type,attack_val):
self.name = name #姓名
self.dog_type = dog_type #种类
self.attack_val = attack_val #攻击力
self.life_val = 100 #生命值 class Person: #人
def __init__(self,name,sex,attack_val):
self.name = name #姓名
self.sex = sex #种类
self.attack_val = attack_val #攻击力
self.life_val = 100 #生命值
self.weapon = Weapon() #直接实例化武器类 def attack(self,obj,weapon_name,weapon_val):
agg = weapon_val + self.attack_val #人的攻击力等于自身攻击力加上武器的攻击之和
life_val = obj.life_val - agg #狗的生命值减去人的攻击力,得到狗的剩余生命
print('{}使用{}攻击了{},{}损失{}点生命值,剩余生命值{}'.format(self.name,weapon_name,obj.name,obj.name,weapon_val,life_val)) class Weapon: #武器 def stick(self): #打狗棒
self.name = '打狗棒'
self.attack_val = 25
return self.name,self.attack_val def knife(self): #屠龙刀
self.name = '屠龙刀'
self.attack_val = 40
return self.name, self.attack_val def gun(self): #AK47
self.name = 'AK47'
self.attack_val = 40
return self.name, self.attack_val d = Dog('小黑','哈士奇',20) #小黑
p = Person('wdc','男',30) #wdc weapon_name,weapon_val = p.weapon.stick() #使用对象p执行武器类中的方法:这里选择的武器是stick()方法下的"打狗棍"
p.attack(d,weapon_name,weapon_val) #执行p对象下的attack(攻击)方法,人攻击狗(狗的对象,武器名称,武器攻击力)
#切换武器
# weapon_name,weapon_val = p.weapon.knife() #使用对象p执行武器类中的方法:这里选择的武器是stick()方法下的"打狗棍"
# p.attack(d,weapon_name,weapon_val) #执行p对象下的attack(攻击)方法,人攻击狗(狗的对象,武器名称,武器攻击力)

python_面向对象——对象间的组合关系的更多相关文章
- python_面向对象——对象之间的关联关系
1.将类中的对象关联起来(简单的方法) class Person: def __init__(self,name,age,sex): self.name = name self.age = age s ...
- 【原创】面向对象作业:选课系统中用pickle储存多个对象间组合引用关系的那些坑
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9030121.html 想直接看结论先提前列出: 1.存储一个对象,文件不是真的给你存储的了对象这种东西, ...
- python_面向对象(6)
第1章 递归函数 1.1 概述 1.2 练习 1.3 二分查找 第2章 面向对象•类 2.1 类的介绍 2.2 书写格式 2.3 类的属性 2.4 self介绍 2.5 类属性补充 2.6 调用查看静 ...
- 使用AutoMapper进行对象间映射
在开发过程中,难免遇到下面这种情况:两个(或多个)对象所拥有的大多数属性是重复的,我们需要在对象间进行映射(即将一个对象的属性值赋给另一个对象.通常我们可以进行如下操作: A a=new A(); a ...
- Objective-c中的对象间的消息传递以及消息路由
刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用.心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法的调用?通过一段时间的理解学 ...
- 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现
姚冬,中老年程序员 叶韵.KY Xu.赵奋强 等人赞同 被邀请了很久了,一直在思考,今天终于下决心开始写回答. 这个问题的确是够大的,Qt的代码规模在整个开源世界里也是名列前茅的,这么大的项目其中的精 ...
- Qt 对象间的父子关系
C++中只要有一个new就必须要有一个delete与之对应 但是Qt中的对象之间有特殊的关系 Qt 对象间的父子关系 每一个对象都保存有它所有子对象的指针 每一个对象都有一个指向其父对象的指针 par ...
- 创建对象的两种方法: new 和 面向对象(对象字面量)及对象属性访问方法
创建对象的两种方法: new 和 面向对象(对象字面量)用 new 时:var o = new Object();o.name = "lin3615";alert(o.name); ...
- iOS分享 - 对象间的通信之delegate、notificationCenter与block
在项目开发中,常常会涉及到对象之间的通信,而为了降低对象间的耦合,会采用delegate.notificationCenter.block三种方式来进行实现,对于他们的使用,也许大家都能熟练掌握,但是 ...
随机推荐
- python 字符串 - python基础入门(12)
在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称:str. 在本文会大量的使用print ...
- AirFlow后台运行调度程序
nohup airflow worker>>$AIRFLOW_HOME/airflow-worker.log >& & nohup airflow scheduler ...
- Python 实现把两个排好序的的列表合并成一个排序列表
列表是升序的 # -*- coding: utf-8 -*- # 合并两个排序的数组 def merge_list(a, b): if not a: return b if not b: return ...
- pandas之聚合运算
通过聚合运算可以得到我们比较感兴趣的数据以方便处理 import pandas as pd import numpy as np # 先创建一组数据表DataFrame df = pd.DataFra ...
- python之文件读写操作笔记
对不同类的文件操作,需要调用相关的库文件,一般情况下,可以选择建立:写文件函数和读文件函数.在写文件与读文件函数中 我们可以采用:with open('文件名','w', encoding='utf ...
- linux中的内核级防火墙(SELINUX)
SElinux是基于内核开发出来的一种安全机制,被称之为内核级加强型防火墙,有力的提升了系统的安全性. SElinux的作用分为两方面:1.在服务上面加上标签: 2.在功能上面限制功能 在linux系 ...
- vscode安装
vscode是一个很好用而且开源的编辑器,支持多种编程语言,这里稍微总结一下使用,省的以后再安装时候再百度查 下载地址:https://code.visualstudio.com/,打开以后点击dow ...
- (十三)JSON的使用(下)
(接上一章节) 4.2 使用ajax交互方式 使用ajax的转换思想 A:异步请求在页面中发起,也要在页面中接收数据并展现. B:ajax中的数据不能从作用域中获取,只能从respons ...
- js检测是不是数字
function isValueNumber(value) { var reg = (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/); var ...
- K2 BPM_快消零售连锁行业门店选址解决方案_十年专注业务流程管理系统
>>>业务流程管理软件选型攻略 快消零售连锁行业门店选址解决方案 业内有句名言:“门店最重要的是什么?第一是选址,第二是选址,第三还是选址” 选址是一个很复杂的综合性商业决策过 ...