当前位置: 首页 > 编程日记 > 正文

[ 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

相关文章:

ceph nautilus相对于minic的主要改动

改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户使用SSO的用户验证模式支持审计模式新的登录页,可以展示更多的集群健康指标使用swagger api的rest api文档 增加的新的管理特性 对于OSD的管理(将osd标记为down,out,修…

word2003计算机应用考试,2017职称计算机考试Word2003操作练习题

2017职称计算机考试Word2003操作练习题实验操作能力是计算机考试考查的一项基本能力,下面是小编给大家提供的职称计算机考试Word2003操作练习题,大家可以参考练习,更多习题练习请关注应届毕业生考试网。1. 将所选文本的字体设置为“华文彩云”…

虚拟化及云厂商聚焦

虚拟化及云厂商聚焦转载于:https://blog.51cto.com/itcn001/1069736

题解:无线通讯网

qwq 跑最小生成树 一共n个电话&#xff0c;所以相当于最小生成树里删去最大的n-1的边 所以答案即为最小生成树的第n大边 prim或者kruskal都行 这是prim 1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4 #include<cmath>5 using namespa…

linux常用操作指令—— 查看磁盘、内存使用情况(df、du、free、top)

显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。当文件系统也确定删除了该文件后,这时候du与df就一致了。实例4:显示目前磁盘空间和使用情况 (最常用)top:“实时查看” ,按。退出 (实时动态显示)

广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!

原标题&#xff1a;考点爆料&#xff01;2019广东电网计算机专业居然考这些&#xff01;本文由广东中公国企为您整理&#xff1a;2019广东电网校园招聘预计于2018年10~11月份开启&#xff0c;计算机类也是其中一个招聘大类&#xff0c;那么2019广东电网校园招聘计算机类专业考什…

修改ceph crush map,并指定到资源池

版本:ceph L 版本 12.2.1 环境:单节点 15 osd -1 0 root default -3 94.53119 host node1 0 hdd 5.37108 osd.0 up 1.00000 1.00000 1 hdd 5.37108 osd.1 …

常见的七种加密算法及实现

**数字签名**、**信息加密** 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、`oauth` 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 **签名加密算法** 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。## 正文### 1. 数字签名**数字签名**,简单来说就是通过提供 **可鉴别** 的 **数字信息** 验证 **自身身份** 的一种方式。一套 **数字签名** 通常定义两种 **互补

MySQL慢查询日志slowlog

慢速查询日志记录的是执行时间超过秒和检查的行数超过的SQL语句,这些语句通常是需要进行优化的。官方参考文档:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html。

Ubantu下hadoop运行第一个例子wordcount过程

Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程&#xff0c;分享一下 将WordCount.java文件放在Hadoop安装目录下&#xff0c;并在安装目录下创建输入目录input&#xff0c;目录下有输入文件file1&#xff0c;file2&#xff0c;其中&#xff1a; file1内容&#xff1a;…

jsp - EL

E L&#xff08;Expression Language&#xff09; 作用&#xff1a;能够用于在 JSP 文件中嵌入 Java 代码的表达式语言&#xff0c;替代小脚本 1、语法结构 ${expression} 2、 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符&#xff0c;如…

node 常用指令 node 扩展链接

node -v node 版本 npm -v npm版本号&#xff0c;npm是在安装nodejs时一同安装的nodejs包管理器 &#xff08;注册、安装模块&#xff0c;和小乌龟有点像&#xff09; npm list 当前目录已安装插件 npm list -g 查看所有全局安装的模块&#xff1a; npm…

增加内核的ceph模块的日志打印

本文主要是在梳理cephfs内核方式挂载的内核代码逻辑所做的准备 环境:Centos 7.5 内核源码版本&#xff1a;3.10.0-862.el7.x86_64 打开ceph模块的debug信息 单独编译ceph模块的.ko文件 ceph在内核的通用模块主要有三个&#xff1a; ceph.ko 模块路径&#xff1a;/usr/src/k…

计算机系统安装和维护实验,2计算机系统安装维护实验报告.doc

2计算机系统安装维护实验报告计算机系统安装维护实验报告院系: 班级&#xff1a; 姓名&#xff1a; 学号&#xff1a;【实验目的】学习了解u盘硬盘启动维护系统【实验内容】通过GHOST11软件进行系统的相关操作用户可以通过GHOST11软件进行硬盘对拷&#xff0c;分区对拷&#xf…

Javascript年月日联动

代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">2 <html>3 <head>4 <title> New Document </title>5 <meta name"Generator" content&…

emmmmmm(官宣?)

实验室永远不会是学习的唯一地点&#xff0c;不是吗&#xff1f; 总后悔当初退竞赛&#xff0c;现在却还是选择退出&#xff0c;大概是自己真的不适合吧。。。转载于:https://www.cnblogs.com/LOW-ctfer/p/9896781.html

ceph unfound object问题的解决

查看丢失对象的pg id ceph health detail 查找该pg下丢失的object ceph pg 8.32 list_missing 尝试修复该pg: ceph pg repair 8.32 ceph pg scrub 8.32 修复不成功的话&#xff0c;可以直接告诉ceph使用已有的版本或者直接删除 尝试切换到旧版本的object:ceph pg 8.32 mark_…

Apache ‘mod_pagespeed’模块跨站脚本漏洞

漏洞名称&#xff1a;Apache ‘mod_pagespeed’模块跨站脚本漏洞CNNVD编号&#xff1a;CNNVD-201310-677发布时间&#xff1a;2013-11-05更新时间&#xff1a;2013-11-05危害等级&#xff1a; 漏洞类型&#xff1a;跨站脚本威胁类型&#xff1a;远程CVE编号&#xff1a;CVE-20…

设备漏电对计算机影响,电脑机箱漏电对电脑有影响吗

电脑机箱漏电一般原因是长期使用在潮湿或高温环境下&#xff0c;电源线或主板的裸露部件因绝缘下降或积灰受潮等原因&#xff0c;接地电转载自电脑百事网容轻微损坏&#xff1b;这时&#xff0c;机箱的带电感觉较明显&#xff0c;有时用试电笔也能点亮。这种情况就要引起注意了…

eoiioe IE 和 firefox js 兼容问题

1、判断浏览器类型 1var ver"IE6";2if (window.XMLHttpRequest)3 ver (!window.ActiveXObject) ? "Mozilla or Safari" : "IE7"; 4return ver;2、获取位置&#xff0c;在firefox中&#xff0c;无法使用object.style.pixelLeft&#xff0c;只…

团队博客(第四周)-“名字好难想”

一&#xff0c;已完成工作 1.美术资源设计完毕 2.界面设计完毕 3.客户端登录程序实现 二&#xff0c;待完成工作 1.服务器的实现 2.等待界面和战斗场景的脚本实现 三&#xff0c;遇到的困难 1.程序事情有点多&#xff0c;没有配合好美术完成功能 四&#xff0c;燃尽图 五&#…

ceph rados命令使用

文章目录Pool相关Object相关导出资源池数据最近了解了rados命令的使用&#xff0c;感觉在对象操作这块还是非常实用。因为rados是属于底层存储核心&#xff0c;所以关于rados的命令针对对象的操作较多。环境中执行 rados -h可以看到命令集分为几个大的模块&#xff1a;资源池、…

前置体验,才是打动用户的神器

在上一篇文章《记住&#xff0c;用户只愿为“体验”付钱》中&#xff0c;我谈到了体验经济和根据体验定价的逻辑&#xff0c;以及一些商业案例&#xff0c;它们共同展现了一种趋势&#xff0c;即用户愿意为体验付钱。同理&#xff0c;在这样的大背景下&#xff0c;互联网产品该…

服务器ip 计算机名,服务器计算机名称或者ip地址

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情区域和可用…

mysql的常用函数

一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制&#xff08;OCT返回八进制&#xff0c;HEX返回十六进制&#xff09; CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e&#xff08;自然…

NOIP模拟题 斐波那契数列

题目大意 给定长度为$n$序列$A$&#xff0c;将它划分成尽可能少的若干部分&#xff0c;使得任意部分内两两之和均不为斐波那契数列中的某一项。 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先求出第$i$个数之前最后一个能和第$i$个数相加为斐波那契数的位置$las…

使用rpmbuild对ceph的源码包进行重新打包

进入ceph源码包下载ceph相关的rpm包和tar包 我们下载的是ceph-12.1.1-0.el7.src.rpmceph L版本的rpm包 执行命令rpmbuild --rebuild ceph-12.1.1-0.el7.src.rpm 等待它执行到configuring done之后就强行终止 -- Found cython -- Performing Test HAS_VTA -- Performing Test …

java与.net比较学习系列(7) 属性

说起属性&#xff0c;实际上java中没有属性这个概念&#xff0c;只有字段和方法&#xff0c;但是可以通过私有字段和声明get,set方法来实现类似于C#中属性的效果。 在C#中&#xff0c;声明属性有两种方式&#xff0c;一种是声明访问器&#xff0c;另外一种是利用C# 3.0新增的自…

国家标准油类计算机,食用油新国标正式实施 产品配方将不再是“机密”

为了更好维护消费者权益&#xff0c;引导食用油市场秩序合理化转变&#xff0c;解决油难选的问题&#xff0c;今年6月21日&#xff0c;国家卫生健康委员会、国家市场监督管理总局联合发布的《食品安全国家标准 植物油》(GB2716-2018)&#xff0c;并于2018年12月21日起正式实施。…

如何终止正在在发送的ajax请求

核心&#xff1a;调用XMLHttpRequest对象上的abort方法 jquery的ajax方法有自己的超时时间设置参数&#xff1a; $.ajax({type:POST,url:b.php,data:,timeout:5000,success:function(){} }) 同时1.$.get返回的数据类型是XMLHttpRequest&#xff0c;请参考手册。&#xff08;$.p…