# 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行。
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_面向对象——对象间的组合关系的更多相关文章

  1. python_面向对象——对象之间的关联关系

    1.将类中的对象关联起来(简单的方法) class Person: def __init__(self,name,age,sex): self.name = name self.age = age s ...

  2. 【原创】面向对象作业:选课系统中用pickle储存多个对象间组合引用关系的那些坑

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9030121.html 想直接看结论先提前列出: 1.存储一个对象,文件不是真的给你存储的了对象这种东西, ...

  3. python_面向对象(6)

    第1章 递归函数 1.1 概述 1.2 练习 1.3 二分查找 第2章 面向对象•类 2.1 类的介绍 2.2 书写格式 2.3 类的属性 2.4 self介绍 2.5 类属性补充 2.6 调用查看静 ...

  4. 使用AutoMapper进行对象间映射

    在开发过程中,难免遇到下面这种情况:两个(或多个)对象所拥有的大多数属性是重复的,我们需要在对象间进行映射(即将一个对象的属性值赋给另一个对象.通常我们可以进行如下操作: A a=new A(); a ...

  5. Objective-c中的对象间的消息传递以及消息路由

    刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用.心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法的调用?通过一段时间的理解学 ...

  6. 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现

    姚冬,中老年程序员 叶韵.KY Xu.赵奋强 等人赞同 被邀请了很久了,一直在思考,今天终于下决心开始写回答. 这个问题的确是够大的,Qt的代码规模在整个开源世界里也是名列前茅的,这么大的项目其中的精 ...

  7. Qt 对象间的父子关系

    C++中只要有一个new就必须要有一个delete与之对应 但是Qt中的对象之间有特殊的关系 Qt 对象间的父子关系 每一个对象都保存有它所有子对象的指针 每一个对象都有一个指向其父对象的指针 par ...

  8. 创建对象的两种方法: new 和 面向对象(对象字面量)及对象属性访问方法

    创建对象的两种方法: new 和 面向对象(对象字面量)用 new 时:var o = new Object();o.name = "lin3615";alert(o.name); ...

  9. iOS分享 - 对象间的通信之delegate、notificationCenter与block

    在项目开发中,常常会涉及到对象之间的通信,而为了降低对象间的耦合,会采用delegate.notificationCenter.block三种方式来进行实现,对于他们的使用,也许大家都能熟练掌握,但是 ...

随机推荐

  1. Spring 启动加载资源到内存

    前言 在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载.初始化缓存.特定任务的注册等等.我找到了三种方式解决下面的问题. 1.使用PostConstruct注解 这种解决方 ...

  2. SAS学习笔记20 CAT函数

  3. asp.net core-13.Cookie-based认证实现

    1.打开visual studio code创建一个MVC项目

  4. mysql常见内置函数

    在mysql中有许多内置的函数,虽然功能都能在PHP代码中实现,但巧妙的应用mysql内置函数可以大大的简化开发过程,提高效率. 在这里我总结一下一些常用的,方便以后查看: mysql字符串函数: c ...

  5. Tomcat安装及其目录结构介绍

    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat的安装版本有绿色解压 ...

  6. Android 把枪/PDA 扫描头自回车没用 处理方法

    XML 控件加上属性 android:imeOptions="actionNone"

  7. Android监听EditText输入字符串,删除指定的字符

    alert_ed = (EditText) a.findViewById(R.id.alert_ed_queue_num); alert_ed.addTextChangedListener(mText ...

  8. 排序算法原理及代码实现(c#)

    1.插入排序 把第一个元素看做已排序数组放在有序数组中,从第二个元素开始,依次把无序数组元素取出和有序数组中的元素逐个比较,并放在有序数组的正确位置上. /// <summary> /// ...

  9. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  10. undefined reference to `udev_device_get_action'

    /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libusb-1.0.a(libusb_1_0_la-linux_udev.o): In ...