热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[python]类的组合

首先,使用面向对象是一个人狗大战的实例:classPerson:def__init__(self,name,hp,aggr,sex):self.name

首先,使用面向对象是一个人狗大战的实例:

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 编程中的一些实用技巧和优化方法。首先,讨论了如何高效地交换两个变量的值,例如 `a` 和 `b` 可以通过 `a, b = b, a` 来实现。此外,文章还提供了在进行数值比较时的简洁写法,如使用 `3.14` 进行精确匹配。这些技巧不仅提高了代码的可读性,还能提升程序的运行效率。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
author-avatar
mobiledu2502880517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有