python--类与面向对象-3

1、类的名称空间和对象的名称空间。(Namespace)

(1)创建一个类就会产生一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

(2)创建一个对象就会创建一个对象的名称空间,存放着对象的名字,也就是对象的属性

当通过对象名.属性名查找属性的时候,会先去对象自己的名称空间中找属性,找不到则去类中找,类也找不到就去父类...最后找不到抛出异常

class Person

  {     def __init__(self,name,live_value,weapon,agg):

                self.name=name

                self.live_value=live_value

                self.weapon=weapon

                self.agg=agg

        def attack(self,obj):

                obj.live_value-=self.agg

        

        def fun():

                print("读者大大最帅")

}

[

p=Person('tony',1000,'金箍棒')

]

                

用花括号括起来的这一部分就叫做类的名称空间。

用中括号括起来的这一部分就叫做对象的名称空间。

(这里面的花括号和中括号都是我加的,实际写代码中不要写,写着是为了方便理解。)

2、面向对象的组合用法

在一个类中以另一个类的对象作为属性存在,称为类的组合使用。

众所周知,前面我们将类比作了一个盒子,但是正如百年孤独里所说的

“遭受百年孤独的家族,注定不会在大地上第二次出现了”

那么

遭受百年孤独的盒子,注定不会再大陆上第二次出现了

所以我们玩对象那是不是可以玩花一点。我的对象能不能从两个类里面提取属性,三个类呢?四个呢?

所以类的组合使用作用就是让对象能够从不同类里面提取元素使用,比如在王者荣耀中,我英雄有基本的普攻等技能了,但是我发现现在伤害不够,那我是不是可以通过买装备的方式来进行属性上的提升,那么买的装备又属于另一个类了。

下面我们先进行代码演示

class Weapon:

        def __init__(self,name,agg,money):

                self.name=name

                self.agg=agg

                self.money=money        

       def baoji(self,obj):

                obj.life_value-=500

class Person:

        def __init__(self,name,agg,life_value,speed_per_second,money,weapon1)

                self.name=name#名字

                self.agg=agg#攻击力

                self.life_value=life_value#生命值

                self.speed_per_second=speed_per_second#移速

                self.money=money#金币

                self.weapon1=Wepon(agg)

        def attack(self,obj):

                #普通攻击的方式

                obj.live_value-=self.agg

                

p=Person('扁鹊',10,10000,50)

p1=Person('貂蝉',15,10000,40)

weapon=Weapon('回响之杖',20,100)

#这里我们定义三个对象,貂蝉和扁鹊对打

查看貂蝉扁鹊的血量

print(p.life_value)

print(p1.life_value)

#扁鹊攻击貂蝉方式

p.attack(p1)

#貂蝉攻击扁鹊方式

p1.attcak(p)

查看貂蝉扁鹊的血量

print(p.live_value)

print(p1.live_value)

#这个时候我扁鹊发现打不过貂蝉我要买个回响之杖。

#这里我们就不把它封装起来了,实际上在游戏中的装备应该都是一个封装或者多个封装函数拼接起来的

if p.money>weapon.money:

        p.wuqi=weapon

#定义出来了一个p的武器(就相当于定义了一个对象其实本质上他就是weapon只不过我们把他的名字变了,这样我们等下就可以通过p.wuqi的名字使用weapon里面的属性了。)

        p.money-=weapon.money

#将原本的金币减去买武器用的钱,这里其实和p.wuqi无关了。只不过我们买了一个独立的武器要消耗钱,把p对象的金钱减一减而已

        p.agg+=weapon.agg

#将回响之杖的攻击和扁鹊原本的攻击相加造出一个带回响之杖的扁鹊因为买了装备了所以给扁鹊加个攻击力。

        

p.wuqi.baoji(p1) # 扁鹊使用武器暴击貂蝉,会发现这里其实本质上就是weapon.baoji(p1),用p.wuqi这个名字也是为了满足见名知意的条件print(p1.life_value)  # 查看貂蝉的生命值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据,好奇点开看了下,下载下来数据差看了下,数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

嵌入式方向还有希望吗?

我刚开始学习,也不知道我定位的是单片机工程师,嵌入式工程师职位的。 我只知道电子工程师,这个职位其实偏硬件,很多岗位需求是硬件设计,PCB设计,还要懂焊接、各种仪器仪表使用,还有些需要懂单片…

Git提交代码进入coding

安装Git后建一个文件在文件里右键点击Git Bash使用命令配置用户名和邮箱git config --global user.name "你的用户名"和git config --global user.email "你的邮箱"命令git init来初始化,自动将当前仓库设置为master创建一个项目(一…

C#操作像素替换图片中的指定颜色

待处理的图片,其特征是包含有限数量颜色,不同的颜色相互交叉使用,相同颜色并未完全连贯,需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作,最后还是自己动手编写简单的处理程序。   程序的…

【 TypeScript 】对TypeScript中类的理解?应用场景?

1. 是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 类是一种用户定义的引用数据类型,也称类类型 传统的面向对象语言基本都是基于类的,JavaScript基于原型的方式让开发者多了很多理解成本在ES6之后&#xff0…

C++ 生成随机数 srand 和 time 函数

C 生成随机数,通常采用 srand 和 time 函数来设置随机数种子。 一、 srand 函数: srand 函数用于设置伪随机数生成器的种子。伪随机数生成器是一个算法,它根据特定的种子生成看似随机的数值序列。在每次程序运行时,如果使用相同…

4种小众的能力,帮你更好地适应未来

新年伊始,又是一个全新的开始。 未来的社会究竟需要什么样的能力?这已经是一个很老的话题,已经有许许多多讨论了。但这其中,可能有一些是容易被人忽略的,或者不容易被注意到的。 我想跟你一起分享,我对这个…

python面向对象练习3

第一题 这是一个电商网站的库存管理问题,我们需要管理商品的库存信息。每个商品都有商品编号、名称和库存数量。 商品编号 商品名称 数量1 手机 102 电视 53 耳机 20现在有一个用户购买了商品编号为1的商品5件,需…

前端代码整洁与规范之CSS篇

一、代码整洁 1. 命名规范 CSS 类名的命名应该简洁清晰,能够准确描述元素的作用。避免使用无意义的名称,例如“a”、“b”等,而应该使用有意义的英文单词或单词缩写。同时,也要避免使用驼峰命名法和下划线命名法混杂使用&#x…

十大经典排序之选择排序

文章目录 概要整体架构流程代码实现小结 概要 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 整体架构流程 首先在未排序序列中找到…

NAND闪存市场格局或将发生变化

随着供应商有效减产,内存价格开始反弹,半导体内存市场终于呈现复苏迹象。从市场动态和需求变化来看,作为两大内存产品之一的NAND闪存正经历新一轮变革。 供应商不断采取行动,提高价格并调整产能利用率。自2023年第三季度以来&…

Live800:企业如何与客户建立长期、稳定关系,实现双赢

在当今的商业环境中,企业不仅需要吸引新客户,更需要与现有客户建立长期、稳定的关系。这样的关系可以带来持续的收入,提高企业的利润性。然而,如何建立和维护这样的关系呢?文章将从三个方面进行深入探讨:提…

SpringBoo和vue项目blob传参未生效

学无止境,气有浩然 文章目录 前言展示问题代码问题解决打完收工! 前言 工作里做的一个小工具,axios传参,使用FormData传参到后端,没有办法映射除字段值,但是从控制台看,传的字段值都是正确的&a…

Milvus向量数据库检索

官方文档:https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离,并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

Javaweb-MyBatis

一、概念 MyBatis是一款优秀的持久层框架,用于简化JDBC开发 MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software found迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github 持久层 负责将数据到保存到数…

科技云报道:两会热议的数据要素,如何拥抱新技术?

科技云报道原创。 今年全国两会上,“数字经济”再次成为的热点话题。 2024年政府工作报告提到:要健全数据基础制度,大力推动数据开发开放和流通使用;适度超前建设数字基础设施,加快形成全国一体化算力体系&#xff1…

低代码与数字化工具:重塑软件开发的新范式

随着信息技术的飞速发展,软件开发已成为推动数字化转型的核心力量。在这个变革的时代,低代码与数字化工具逐渐崭露头角,它们不仅简化了开发过程,还大大提高了开发效率,成为推动软件开发领域变革的重要力量。 低代码&am…

面试经典-11-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,…

2024自动化测试的痛点与发展趋势!

前几天在技术交流群里,大家讨论了很多关于自动化测试落地面临的痛点和如何创造价值的话题,颇有感触。 自动化测试这个话题,从出现到在国内大规模开展实践,有很长的一段时间了。早期,大家对自动化测试的理解和使用目的…

java:学生管理系统

一、介绍 该功能是实现学生信息的添加,查看,修改,删除以及退出系统的简单操作。 二、代码实现 public class Student {private String sid;//学号private String name;//姓名private String age;//年龄private String address;//地址publi…