《大数据分析技术应用》课件-项目三 寻宝游戏项目_第1页
《大数据分析技术应用》课件-项目三 寻宝游戏项目_第2页
《大数据分析技术应用》课件-项目三 寻宝游戏项目_第3页
《大数据分析技术应用》课件-项目三 寻宝游戏项目_第4页
《大数据分析技术应用》课件-项目三 寻宝游戏项目_第5页
已阅读5页,还剩212页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目背景|项目概述|学习目标|任务实施步骤1.寻宝游戏实现【数据分析Python项目化实践】01101111011010111101010000101101010100111101背景先导项目概述项目学习目标任务实施步骤01Background02BriefIntroduction03LearningObjectives04ImplementationSteps主要内容新质生产力是通过技术革命性突破、生产要素创新性配置和产业深度转型升级所催生的先进生产力。强调高科技、高效能和高质量,旨在摆脱传统经济增长方式,推动生产力的现代化和高质量发展。01科技创新是发展新质生产力的核心要素02产业创新是发展新质生产力的重要载体03发展方式创新是发展新质生产力的重要途径04制度创新是发展新质生产力的重要支撑05人才创新是发展新质生产力的力量之源发挥创新主导作用加快发展新质生产力高新技术产业人才需求剧增探索与创新探索与创新是推动社会和经济发展的核心动力。通过不断探索未知领域,我们能够发现新的知识和技术,解决复杂的问题,提升生产力和生活质量。企业和个人都需要具备创新思维,敢于挑战传统,拥抱变化。通过不断创新,我们可以开辟新的市场,创造更多的就业机会,推动可持续发展。项目三维目标理解面向对象编程的基本原则,包括封装、继承和多态;

(重点:《Python程序开发职业技能等级标准》初级1.3.1)了解类变量和实例变量的区别;理解公有成员和私有成员的区别及其在Python中的实现方式;掌握从父类继承属性和方法,并理解继承的优势;

(重点:《Python程序开发职业技能等级标准》初级1.3.1)理解代码重用和模块化的原则。知识目标能力目标素质目标证证项目三维目标会使用Python定义类,并创建类的实例;会使用__init__和__del__方法初始化和清理资源;会定义和使用类的属性和方法,包括get和set方法;会调试和优化面向对象代码。知识目标能力目标素质目标011011110110101111010111100100001011010101001111101项目三维目标通过参与逻辑严密的编程活动,培养自身的逻辑思维能力;在编程实践中,将学习并遵循良好的编程习惯和代码规范,建立良好的职业素养;在项目中积极参与团队合作,通过协作完成共同的目标,提高团队协作能力;通过编程学习和实践,激发对编程的浓厚兴趣,并树立终身学习的积极态度。能力目标素质目标知识目标011011110110101111010111100100001011010101001111101项目总体要求本项目以寻宝游戏为设计核心,通过Python编程语言,利用面向对象和类的知识,构建一个互动性强、趣味性高的寻宝游戏。寻宝游戏实现游戏规则地图生成游戏开始时,系统会随机生成一个地图,地图上分布着多个宝藏位置。玩家角色玩家在地图上扮演寻宝者的角色。玩家移动玩家可以在地图上上下左右移动,寻找宝藏。得分和战绩玩家的得分会实时更新并显示在战绩板上。游戏结束当所有宝藏都被找到或者达到一定的游戏时间限制时,游戏结束。超级玩家的特殊能力超级玩家拥有的特殊能力可以在游戏中使用一次。多人游戏游戏支持多人同时进行。011011110110101111010111100100001011010101001001111012.面向对象编程知识学习目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010

了解面向对象编程的优势

了解面向对象编程的概念

了解面向对象编程的特点

了解面向对象编程的应用01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010面向对象编程的概念面向对象编程(Object-OrientedProgramming,简称OOP)是一种软件设计与编程范式,它运用“对象”的概念来构建软件。在OOP中,对象是数据与能处理这些数据的方法的结合体。此范式强调数据的封装、继承和多态,旨在提升软件的可重用性、灵活性和扩展性。010010011001101010100100110110100101110101000100001011011101001010101101010011010010面向对象编程的特点同一类型的对象能根据不同情境展现不同行为,增强代码的灵活性和可扩展性。通过抽象类和接口提炼共性,提高代码的可读性和可维护性。将多个对象组合成更复杂对象,促进代码的复用和扩展。子类能继承父类的属性和方法,减少代码重复,提高复用性。继承性多态性抽象性组合性将数据和操作这些数据的方法封装在类中,仅暴露必要的接口,隐藏内部细节,从而提升安全性和可维护性。封装性方便建模易维护性OOP设计的结构清晰,易于阅读和维护,降低成本。继承机制使得需求变更时只需局部调整。虽不完全等同于现实对象,但OOP的对象概念简化了建模过程。易扩展性通过继承减少冗余代码,快速扩展现有功能,提高开发效率。可测试性代码结构便于单元和模块测试,确保质量和可靠性模块化封装保护内部数据,提升程序模块化水平,便于后期维护。可重用性鼓励模块化和组件化开发,实现代码的高效重用。面向对象编程的优势面向对象编程的应用面向对象编程非常适合于大型软件系统的开发。通过类和对象的层次结构,程序员可以将复杂的系统划分为多个独立的模块,提高代码的可维护性和可扩展性。大型软件系统面向对象编程的应用GUI应用程序图形用户界面(GUI)应用程序通常由多个交互的组件组成。面向对象编程通过封装和继承,使得组件的定义和交互更加自然和直观。面向对象编程的应用游戏开发游戏开发需要处理大量的对象和复杂的交互逻辑。面向对象编程通过对象的封装和多态性,使得游戏的开发和维护更加容易。不急后续会有操作应用实例哦~1.面向对象编程的概念2.面向对象编程的特点3.面向对象编程的优势4.面向对象编程的应用小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100103.生成游戏地图任务实施【大数据分析技术应用】课程寻宝游戏实现能够正确定义地图类;能够对类进行实例化能力目标主要内容任务工单任务说明引导问题任务评价任务解决方案使用Python创建问卷任务工单定义一个地图类,该类应包含生成和显示游戏地图、管理宝藏位置等功能。地图类应能够随机生成宝藏位置,并在控制台上显示地图状态。此外,地图类应能够处理玩家找到宝藏后对宝藏位置的更新。任务概述

任务描述:根据表3.1给出的信息,定义地图类。010010011001101010100100110110100101110101000100001011011101001010101101010011010010(1)什么是面向对象?面向对象和面向过程有什么区别(2)定义类的语法是什么?(3)对类进行实例化的语法是什么?(4)为什么需要对类进行实例化?(5)面向对象的类定义能否改为面向过程编程?需要注意什么?”

问题引导:任务概述

任务评价:任务概述评价内容评价要点分值分数评定自我评价1.任务实施定义地图类6分正确定义地图类的定义头部,得1分;正确定义属性,得1分;正确定义generate_map()方法,得2分,正确定义display_map()方法,得2分

对类进行实例化1分正确对类进行实例化,得1分

2.结果展现运行程序2分能够正确打印出地图,得2分

3.任务总结依据任务实施情况总结结论1分总结内容切中本任务的重点要点得1分

合计10分

任务解决方案选择合适且熟悉的IDE,创建Python脚本。使用pycharm创建Python项目任务解决方案定义Map类。classMap:任务解决方案定义__init__()初始化方法。def__init__(self,size):self.size=size#地图的尺寸,例如(5,5)self.map=[['.'for_inrange(size[0])]for_inrange(size[1])]self.treasure_locations=[]#宝藏的位置__init__()初始化方法用于初始化地图类的属性,分别为size、map和treasure_locations。其中,size的初始值在对该类进行实例化时设置,由外部传入。map的初始值为大小为size[0]*size[1]的二位列表,所有元素值都设为“.”,表示该位置为空。treasure_locations的初始值为空列表,表示当前未设置任何宝藏。任务解决方案定义generate_map()方法。defgenerate_map(self):#随机放置宝藏for_inrange(random.randint(1,self.size[0]*self.size[1]//4)):treasure_x=random.randint(0,self.size[0]-1)treasure_y=random.randint(0,self.size[1]-1)self.treasure_locations.append((treasure_x,treasure_y))self.map[treasure_x][treasure_y]='T'generate_map()方法利用random模块随机生成几个宝藏坐标,然后更新地图。将有宝藏的地图位置的值更改为“T”,表示该位置有宝藏。任务解决方案定义display_map()方法。defdisplay_map(self,player_position=None):#显示地图,可以选择显示玩家位置foriinrange(self.size[0]):forjinrange(self.size[1]):ifplayer_positionand(i,j)==player_position:print('P',end='')else:print(self.map[i][j],end='')print()#换行display_map()方法用于打印地图,对于每个地图位置,“.”表示为空,“T”表示有宝藏,“P”表示有玩家。任务解决方案编写如下代码,验证地图类的功能。print("欢迎进入寻宝游戏!")map=Map((5,5))map.generate_map()map.display_map()创建一个大小为5*5的地图类对象,并创建一个随机放置宝藏的地图,然后调用display_map()方法打印地图。任务解决方案保存脚本文件并运行。执行结果该程序构造了一个5*5的地图,并随机选取了几个坐标放置了宝藏。程序打印了5行5列个字符,其中,“.”表示为空,即表示这个位置没有宝藏,“T”表示这个位置有宝藏。每一次执行程序,输出的结果都不一样。坐标(1,1)、(4,1)、(4,3)三个位置都放置了宝藏,其它位置都为空。小结1.如何定义类?2.

如何对类进行实例化?不急后续会有详细说明与讲解哦~011011110110101111010111100100001011010101001001111014.面向对象知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握对象的概念掌握对象的属性和方法的概念掌握类的概念对象的概念在面向对象编程中,对象就像是一个具体的“东西”或“实体”,它有自己独特的身份和特征。狗是一个“对象”对象会有一些属于它自己的属性(特征)。对象还会有一些属于它自己的行为——方法。对象的属性和方法属性方法属性是对象的特征或状态,它描述了对象的一些基本信息。方法是对象的行为或操作,它描述了对象可以执行的动作。对象一个对象会包含零个过多个属性和方法。属性和方法反映了一个对象的性质。对象的属性和方法狗有至少三个属性:名字、颜色、年龄狗有至少三个方法:叫、跑、吃类类是对具有相似属性和行为事物的抽象描述。任何汽车都会有颜色、品牌、型号等属性。它就是所有具体的一个汽车对象的“模板”。对于每一个汽车对象,它们都有自己的属性值。不急后续会深入学习类的定义哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.对象的概念2.对象的属性和方法的概念3.类的概念011011110110101111010111100100001011010101001001111015.类的定义知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握定义类的组成部分掌握定义类的语法掌握定义类的注意事项定义类的组成部分类名类的属性类的方法__init__初始化方法使用关键字class来定义类,并紧跟类名。类名通常使用大写字母开头的驼峰命名法类的属性是可以在类的定义中直接声明,也可以在类的方法中定义。类的方法定义在类的内部。方法的第一个参数通常是self,用于引用类的实例。__init__是一个特殊的方法,用于在创建类的实例时初始化对象的属性。定义一个类时,通常需要显式地给出以下4个部分:定义类的语法classClassName:使用关键字class定义一个类

attribute=value在类的定义中直接定义类的属性defmethod_name(self,parameters):#类的方法pass在类的定义中定义类的方法定义类的语法def__init__(self,parameters):#初始化方法,用于创建类的实例self.attribute=value在类的定义中定义__init__方法在方法中定义类的实例属性。定义类的语法classCar:#类的属性(这里是类变量,通常用于所有实例共享的数据)manufacturer="FAW"

#类的初始化方法(构造方法),当创建类的新实例时会自动调用def__init__(self,model,color,year):#实例属性(这里是实例变量,每个实例都有自己的值)self.model=modelself.color=colorself.year=year

#类的方法(实例方法)defstart_engine(self):print(f"Startingtheengineof{self.model}...")

#另一个类的方法defdrive(self):print(f"Driving{self.color}{self.model}from{self.year}...")e.g.定义一个类名为Car的类类的属性__init__方法类的方法类的实例属性定义类的注意事项使用class定义类,且不要忘记在类定义后加冒号;初始化方法__init__名字是固定的,前后必须两个“_”;类属性变量没有self引用,实例变量有self引用;类的方法参数列表第一个必须是self;classClassName:def__init__(self,parameters):

self.attribute=valuedefmethod_name(self,parameters):不急后续还会详细讲解类的实例化哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.定义类的组成部分2.定义类的语法3.定义类的注意事项011011110110101111010111100100001011010101001001111016.类的实例化知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握实例化类的语法掌握实例化类的的注意事项类的实例化类的实例化就是使用一个已定义的类来创建该类的对象。instance_name=ClassName(arguments)使用前面已定义的类名。参数列表对应__init__方法的形参列表,不包括self。将实例化的结果赋值给一个变量,这个变量就是当前创建的对象。类的实例化my_car=Car("HONGQI","red",2021)e.g.创建一个Car类的实例访问对象的实例属性print(my_car.model)#输出:HONGQIprint(my_car.color)#输出:redprint(my_car.year)#输出:2021调用对象的方法my_car.start_engine()#输出:StartingtheengineofHONGQI...my_car.drive()#输出:DrivingredHONGQIfrom2021...实例化类的注意事项在对类进行实例化时,参数列表必须与__init__方法的形参列表对应,但要除去self。在调用对象方法时,参数列表也必须要与相应方法的形参列表对应,但要除去self。不能访问类中没有定义的属性或方法。classDog:def__init__(self,name,age):=nameself.age=agemy_dog=Dog("Buddy","three")classDog:def__init__(self,name,age):=nameself.age=agemy_dog=Dog("Buddy","three")color=my_dog.colorXDog类这种未定义color,不可访问!不急后续会有操作应用实例哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.实例化类的语法2.实例化类的注意事项7.创建游戏玩家任务实施【大数据分析技术应用】课程寻宝游戏实现能够正确定义玩家类;能够正确定义类的成员;能够正确创建玩家对象;能够正确访问对象属性和方法能力目标主要内容任务工单任务说明引导问题任务评价任务解决方案使用Python创建问卷任务工单定义并实现一个玩家类,该类应包含管理玩家角色和行为的功能。玩家类包含玩家的名称和位置属性,以及允许玩家在地图上移动和寻找宝藏的方法。同时,玩家类包含一个私有方法,用于检查当前位置是否有宝藏。任务概述

任务描述:根据表3.2中定义的玩家类的属性与方法,设计并实现玩家类。010010011001101010100100110110100101110101000100001011011101001010101101010011010010(1)什么是类成员?列举一些类成员的类型。(2)如何在Python中定义类成员?(3)什么是构造函数和析构函数?(4)在Python中,构造函数和析构函数的特殊方法名称是什么?(5)构造函数和析构函数有什么不同之处?(6)什么是公有函数和私有函数?(7)如何在Python类中定义公有函数和私有函数?”

问题引导:任务概述

任务评价:任务概述评价内容评价要点分值分数评定自我评价1.任务实施定义玩家类5分正确定义__init__()构造函数得1分;正确定义move()方法得2分,正确定义__check_treasure()私有方法,得2分

创建玩家类对象1分能偶正确创建玩家类对象,得1分

移动玩家并检查宝藏2分能够正确调用move()方法进行移动,得1分;能正确调用__check_treasure()方法检查宝藏,得1分2.结果展现运行程序1分程序能够正常执行,且能正常输出结果,得1分

3.任务总结依据任务实施情况总结结论1分总结内容切中本任务的重点要点得1分

合计10分

任务解决方案定义Player类。classPlayer:任务解决方案定义__init__()构造函数。def__init__(self,name,position):=name#玩家的名字self.position=position#玩家在地图上的位置,格式为(x,y)初始化name属性和position属性。name表示玩家名字,为字符串值。position表示玩家初始位置,为一个元组。两个属性的初始值都由外部传入。任务解决方案定义move()方法。defmove(self,direction,map_size):#根据方向移动玩家x,y=self.positionifdirection=='up'andx>0:x-=1elifdirection=='down'andx<map_size[0]-1:x+=1elifdirection=='left'andy>0:y-=1elifdirection=='right'andy<map_size[1]-1:y+=1self.position=(x,y)move()方法向指定的方向前进一步,进而更新position属性的值为新位置的坐标。该方法需要检查指定方向是否可行进。如果指定方向已经到头了,则不更新位置。任务解决方案定义__check_treasure()私有方法。def__check_treasure(self,map):#检查玩家当前位置是否有宝藏x,y=self.positionifmap.map[x][y]=='T':print("你发现了宝藏!")map.map[x][y]='.'#清除宝藏returnTruereturnFalse该方法检查玩家当前所在位置是否有宝藏。如果有,则打印“你发现了宝藏!”,并取走该位置的宝藏,并返回True。否则,返回False。取走宝藏的操作就是将地图中该位置的值由“T”变更为“.”。任务解决方案编写如下代码,验证玩家类的功能。print("欢迎进入寻宝游戏!")map=Map((5,5))map.generate_map()创建一个大小为5*5的地图类对象,并创建一个随机放置宝藏的地图。创建玩家类对象,设置玩家名字为“陈杰”,初始位置为(0,0)。player=Player("陈杰",(0,0))任务解决方案编写如下代码,验证玩家类的功能。map.display_map(player.position)调用map.display_map()方法,传入玩家的位置,通过输出信息查看当前的地图状态,包括宝藏位置和玩家位置。其中,宝藏用“T”表示,玩家用“P”表示。调用move()方法,移动玩家位置,然后再次调用map.display_map()方法显示当前地图状态,调用__check_treasure()方法检查当前位置是否有宝藏。#玩家移动并检查宝藏print("移动玩家位置...")player.move('right',map.size)map.display_map(player.position)player.__check_treasure(map)任务解决方案保存脚本文件并运行。执行结果程序在两个位置放置了宝藏,分别是(1,3)和(2,0)。此外,玩家位于地图(0,0)处。地图其它位置皆为空。玩家向右移动了一个位置,因此更新位置到(0,1)。此时,玩家未发现宝藏,因此并未输出“你发现了宝藏!”宝藏的位置也没任何变化。小结1.如何定义类的不同成员?2.

如何定义构造函数和析构函数?3.如何定义公有函数和私有函数?不急后续会有详细说明与讲解哦~011011110110101111010111100100001011010101001001111018.类的成员知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握类的属性分类及其含义掌握类的方法分类及其含义类的属性在面向对象编程中,类的成员对于定义类的特质和行为至关重要,它们使类的实例(即对象)具备独特状态和功能。类的成员包括属性和方法。属性是用于存储对象状态的变量,可以是实例属性(每个对象独有)或类属性(所有对象共享)。实例属性隶属于各个对象,每个对象都拥有独立的实例属性值。类属性属于类本身,在所有实例对象间共享。实例属性实例属性隶属于各个对象,每个对象都拥有独立的实例属性值。它们通常通过类的构造方法__init__进行初始化,并且只能通过对象来访问。classCar:def__init__(self,make,model,year):self.make=make#实例属性self.model=model#实例属性self.year=year#实例属性car=Car(“FAW”,“HONGQI”,“2024”)print(car.make)这些都是实例属性实例属性必须对类进行实例化之后才能访问。类属性类属性属于类本身,在所有实例对象间共享。它们可以在类外部直接通过类名访问,或在类内部通过类名或对象访问。classMyClass:class_attr=42#类属性val=MyClass.class_attr这是一个类属性类属性无须实例化即可访问。类的方法方法是定义对象行为的函数,包括实例方法(操作实例属性)、类方法(操作类属性)和静态方法(独立于类和实例)。实例方法是操作实例属性和其他实例方法的函数,通过self关键字访问。类方法是操作类属性的函数,通过@classmethod装饰器和cls关键字定义。静态方法是独立于类和实例的函数,通过@staticmethod装饰器定义。实例方法实例方法是类中最常见的方法类型,通过对象调用。它们能够访问并修改对象的实例属性,且通常以self作为第一个参数,代表对象自身。classMyClass:def__init__(self,x,y):self.x=xself.y=y

definstance_method(self):#在类实例方法中可以访问实例的属性print(f"Instancevaluex:{self.x}")print(f"Instancevaluey:{self.y}")inst=MyClass(1,2)inst.instance_method()这是一个实例方法。实例方法的第一个参数必须是self。实例方法必须对类进行实例化才能访问。类方法类方法通过@classmethod装饰器定义,可通过类或对象调用。类方法的首个参数通常是cls,代表类本身,主要用于操作类级别的属性或执行与类直接相关的操作。classMyClass:class_attr=10

@classmethoddefclass_method(cls,x):#在类方法中可以访问类的属性print(f"Classattribute:{cls.class_attr}")print(f"Receivedvalue:{x}")MyClass.class_method(12)这是一个类方法。定义开头需要使用@classmethod装饰器。类方法的第一个参数必须是类本身,通常命名为cls。类方法无需实例化即可调用。静态方法静态方法通过@staticmethod装饰器定义,同样可通过类或对象调用。但静态方法与类及对象无特殊关联,更像是一般的函数,只是位于类的命名空间中。classMyClass:@staticmethoddefstatic_method(x,y):returnx+yres=MyClass.static_method(1,2)这是一个静态方法。定义开头需要使用@staticmethod装饰器。静态方法无需实例化即可调用。不急后续会深入学习构造函数与析构函数哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.类的属性分类及其含义2.类的方法分类及其含义011011110110101111010111100100001011010101001001111019.构造函数与析构函数知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握构造函数的含义掌握定义构造函数的语法掌握析构函数的含义掌握定义析构函数的语法构造函数构造函数是一种特殊的实例方法,用于在创建新对象时初始化对象的状态。析构函数是在类实例化时最先被调用的一个类实例方法。当对类进行实例化时,构造函数会自动被调用。classCar:def__init__(self,make,model,year):self.make=make#实例属性self.model=model#实例属性self.year=year#实例属性car=Car(“FAW”,“HONGQI”,“2024”)当对类进行实例化时,构造函数会被自动调用。定义构造函数的语法在python中,使用固定的方法名__init__来定义构造函数。class类名:def__init__(self,参数列表):...#方法体类名(实参列表)构造函数无须显示调用,在创建对象时会自动调用。析构函数析构函数是在对象被销毁之前自动调用的特殊方法,它允许我们执行一些清理工作,如释放资源、关闭文件等。析构函数是对象被销毁时最后被调用的一个类实例方法。当一个对象没有被任何变量引用,Python解释器会自动销毁这个对象,此时就会调用该对象的析构函数。classCar:def__init__(self,make,model,year):self.make=make#实例属性self.model=model#实例属性self.year=year#实例属性def__del__(self):print(“我被销毁了!”)deffunc():car=Car(“FAW”,“HONGQI”,“2024”)func()这是一个func()函数中的局部变量car。当func()执行结束,car就不复存在,响应对象被自动销毁。定义析构函数的语法在python中,使用固定的方法名__del__来定义析构函数。class类名:def__del__(self):...#方法体析构函数只有一个self参数,不接收其它参数。析构函数无须显式调用,当没有任何变量引用该对象时,Python解释器会自动调用析构函数。由于Python的垃圾回收器是自动的,并且不受程序员的直接控制,因此__del__方法通常不是用于执行关键清理任务的理想选择。对于需要明确释放的资源(如文件句柄、数据库连接等),更好的做法是使用上下文管理器(通过实现__enter__和__exit__方法)或with语句,或者使用try/finally块来确保资源得到适当的清理。不急后续会深入学习公有函数与私有函数哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.构造函数的含义及其语法2.析构函数的含义及其语法0110111101101011110101111001000010110101010010011110110.公有函数与私有函数知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握公有函数的含义掌握定义公有函数的语法掌握私有函数含义掌握定义私有函数的语法公有函数公有函数(公有方法)是类的外部可以直接访问的方法。在一个类中,没有任何特殊前缀的实例方法,都是公有函数。classMyClass:defpublic_method(self):print("Thisisapublicmethod.")

#创建实例并调用公有方法obj=MyClass()obj.public_method()#输出:Thisisapublicmethod.任何名字没有特殊前缀的方法都是公有函数。只要创建了对象,就能直接调用公有函数。定义公有函数的语法定义公有函数的语法非常简单。公有函数是类中定义的普通方法,默认情况下,它们是公有的。以下是定义公有函数的基本语法:classClassName:defmethod_name(self,parameters):

...#方法体定义公有函数的语法classDog:defbark(self):print("Woof!")defget_age(self,age):returnage#创建一个Dog类的实例my_dog=Dog()#调用公有方法my_dog.bark()#输出:Woof!print(my_dog.get_age(5))#输出:5e.g.这是一个公有函数。这也是一个公有函数。私有函数私有函数是类的外部不能直接访问的方法。它们主要用于类的内部实现细节,并且通常不希望在类的外部被调用。私有函数①

以单下划线“_”开头的方法,表示一个受保护的方法,通常不建议在类外部直接访问,但仍然可以访问。它主要是一种约定,而不是强制性的限制。②

以双下划线“__”开头的方法,表示一个私有方法,Python会对其进行名称改写(namemangling),使其在类外部难以访问。受保护的方法classClassName:def_protected_method(self,parameters):#方法体pass以单下划线开头的方法就是受保护的方法。受保护的方法建议不要被直接调用,但没有实质约束,对象仍然可以直接调用。classMyClass:def_protected_method(self):print("Thisisaprotectedmethod.")

#创建实例并尝试调用受保护的方法(在Python中仍然是可访问的)obj=MyClass()obj._protected_method()#输出:Thisisaprotectedmethod.e.g.私有方法classClassName:def__private_method(self,parameters):#方法体pass以双下划线开头的方法就是私有方法。私有方法不能被直接调用,只能通过公有方法简介调用。私有方法classMyClass:def__private_method(self):print("Thisisaprivatemethod.")

defcall_private_method(self):self.__private_method()

#创建实例并尝试直接调用私有方法(在Python中会引发错误)obj=MyClass()#obj.__private_method()#这会引发AttributeError

#但可以通过类中的其他公有方法间接调用私有方法obj.call_private_method()#输出:Thisisaprivatemethod.e.g.如果直接调用,则会报错通过公有方法间接调用不急后续会有操作应用实例哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.公有函数的含义及其语法2.私有函数的含义及其语法11.统计战绩任务实施【大数据分析技术应用】课程寻宝游戏实现能够正确定义战绩类;能够正确定义战绩类的属性;能够正确创建战绩对象;能够正确定义get方法和set方法能力目标主要内容任务工单任务说明引导问题任务评价任务解决方案使用Python创建问卷任务工单定义并实现一个玩家类,该类应包含管理玩家角色和行为的功能。玩家类包含玩家的名称和位置属性,以及允许玩家在地图上移动和寻找宝藏的方法。同时,玩家类包含一个私有方法,用于检查当前位置是否有宝藏。任务概述

任务描述:根据表3.3定义的战绩类的属性与方法,利用定义类、属性的方法设计并实现一个战绩类。010010011001101010100100110110100101110101000100001011011101001010101101010011010010(1)什么是类属性?什么是对象属性?(2)类属性和对象属性之间有什么区别?(3)什么是公有属性和私有属性?(4)在Python中,如何定义公有属性和私有属性?(5)请解释一下私有属性的命名约定。(6)什么是get方法和set方法?(7)为什么需要使用get和set方法?”

问题引导:任务概述

任务评价:任务概述评价内容评价要点分值分数评定自我评价1.任务实施定义战绩类5分正确定义类属性,得1分;正确定义私有属性,得1分;正确定义get方法和set方法,得3分

创建战绩对象1分能够正确创建战绩对象,得1分

对战绩对象进行操作2分能够正确调用战绩对象得方法,得2分2.结果展现运行程序1分程序能够正常执行,且能正确输出玩家名字和得分信息,得1分

3.任务总结依据任务实施情况总结结论1分总结内容切中本任务的重点要点得1分

合计10分

任务解决方案定义Scoreboard类。classScoreboard:任务解决方案定义类属性players。players={}#类属性,存储所有玩家对象类属性players用于存储游戏中的所有玩家对象。在游戏中,我们创建多个计分面板,每个计分面板都管理自己的一批玩家的得分。所有计分面板的所有玩家对象都会被添加进palyers类属性中。任务解决方案定义__init__()构造方法。def__init__(self):#私有属性,存储当前积分面板的玩家名和得分self.__player_scores={}定义__player_scores属性,该属性是当前积分面板所管理的玩家名到玩家得分的键值对字典。设置__player_scores初始值为空字典。任务解决方案定义add_player()方法。defadd_player(self,player):self.players[]=playerself.__player_scores[]=0add_player()方法将一个玩家对象添加进players字典中,并将玩家名添加进__player_scores字典中,并设置其初始分值为0分。任务解决方案定义update_score()方法。defupdate_score(self,player,points):self.__player_scores[]+=pointsupdate_score()方法为指定玩家增加指定分数。任务解决方案定义get_score()方法。defget_score(self,player):returnself.__player_scores.get(,0)get_score()方法获取指定玩家的得分并返回。如果玩家未添加进players字典中,则返回0分。任务解决方案定义set_score()方法。defset_score(self,player,score):self.__player_scores[]=scoreset_score()方法为指定玩家直接设置指定分数。任务解决方案定义display_scores()方法。defdisplay_scores(self):forname,scoreinself.__player_scores.items():print(f"{name}:{score}")display_scores()方法遍历__player_scores字典,打印当前所有玩家的名字和得分。任务解决方案编写如下代码,验证战绩类的功能。print("欢迎进入寻宝游戏!")scoreboard=Scoreboard()创建战绩类对象。创建两个玩家对象,一个玩家对象名字为“陈杰”,初始位置为(0,0);第二个玩家对象名字为“丽丽”,初始位置为(0,1)。player1=Player("陈杰",(0,0))player2=Player("丽丽",(0,1))任务解决方案编写如下代码,验证玩家类的功能。scoreboard.add_player(player1)scoreboard.add_player(player2)调用add_player()方法,将这两个玩家添加进palyers字典中。调用update_score()方法更新玩家的得分。该方法为指定玩家增加指定分数。起初,所有玩家的初试分数都是0分。更新“陈杰”玩家为10分,更新“丽丽”玩家为5分。scoreboard.update_score(player1,10)scoreboard.update_score(player2,5)任务解决方案编写如下代码,验证玩家类的功能。scoreboard.display_scores()调用display_scores()方法打印当前所有玩家的名字与得分信息。任务解决方案保存脚本文件并运行。执行结果程序添加了两名玩家,分别是“陈杰”和“丽丽”,其更新的得分分别为10分和5分。小结1.如何定义类的不同类型的属性?2.

如何定义get方法和set方法?不急后续会有详细说明与讲解哦~0110111101101011110101111001000010110101010010011110112.类属性与对象属性知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握类属性的含义及其语法掌握对象属性的含义及其语法掌握类属性与对象属性的区别类属性类属性是属于类本身的变量,而不是某个实例的变量。类属性在所有实例之间共享。类属性通常用于存储与类相关的常量或共享数据。classMyClass:class_attribute="somevalue"在类的定义中直接定义类属性。类属性classCar:#类属性wheels=4def__init__(self,make,model):self.make=make#实例属性self.model=model#实例属性#创建两个实例car1=Car("一汽","红旗")car2=Car("东风","御风")#访问类属性print(Car.wheels)#输出:4print(car1.wheels)#输出:4print(car2.wheels)#输出:4e.g.类属性在所有对象间共享。无论创建多少个Car实例,它们的wheels属性值都是4。对象属性对象属性是属于特定实例的变量,每个实例都有自己独立的对象属性。对象属性在类的构造函数中定义,并通过self关键字进行初始化。每个实例对象都有属于自己的对象属性。def__init__(self,value):self.instance_attribute=value在__init__构造函数中定义对象属性。对象属性的访问必须使用self关键字。对象属性classPerson:def__init__(self,name,age):=name#对象属性self.age=age#对象属性#创建实例p1=Dog("小王",23)p2=Dog("小张",35)#访问对象属性print(p1.name)#输出:小王print(p2.age)#输出:35e.g.每个对象都有自己的对象属性。类属性与对象属性的区别类属性属于类本身;对象属性属于类的实例。12修改类属性会影响所有实例;修改对象属性只影响特定实例。34类属性存储与类相关的数据;对象属性存储描述对象状态的数据。类属性常用于存储常量、配置参数等;对象属性用于存储描述对象状态的特定数据。不急后续会深入学习公有属性与私有属性哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.类属性的含义及其语法2.对象属性的含义及其语法3.类属性与对象属性的主要区别0110111101101011110101111001000010110101010010011110113.公有属性与私有属性知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握公有属性的含义及其语法掌握私有属性的含义及其语法公有属性公有属性是指在类中定义的属性,这些属性可以被类的实例和类的外部直接访问和修改。共有属性通常没有任何访问限制,意味着任何代码都可以读取或更改这些属性的值。classMyClass:def__init__(self,public_attr):self.public_attr=public_attr定义公有属性的语法非常简单。只要没有使用下划线开头的属性,就是共有属性。这是一个公有属性。公有属性classPerson:def__init__(self,name,age):=name#公有属性self.age=age#公有属性#创建实例person=Person("Alice",30)#访问公有属性print()#输出:Aliceprint(person.age)#输出:30只要创建了对象,就可以直接访问和修改公有属性。e.g.私有属性私有属性是指在类中定义的属性。私有属性只能在类的内部访问和修改,不能被类的实例或外部代码直接访问。私有属性①

单下划线前缀的属性:这种方式表示属性是受保护的,通常不建议在类外部直接访问,但并不是严格的私有属性。它更多的是一种约定,表示该属性不应该被外部直接使用。②

双下划线前缀的属性:这种方式会触发名称改写(namemangling),使得属性名在类外部变得难以访问。单下划线前缀的属性classMyClass:def__init__(self):self._protected_attr="Iamprotected"obj=MyClass()print(obj._protected_attr)#可以访问,但不建议以单下划线开头的属性就是受保护的属性。受保护的属性建议不要被直接访问,但没有实质约束,对象仍然可以直接访问这种属性。双下划线前缀的属性classMyClass:def__init__(self):self.__private_attr="Iamprivate"defget_private_attr(self):returnself.__private_attrobj=MyClass()print(obj.get_private_attr())#通过方法访问私有属性#print(obj.__private_attr)#会报错不能直接访问双下划线前缀的属性,否则会报错。能够通过方法简介访问私有属性。不急后续会深入学习get与set方法哦~小结011211101101011011010010011001101010100100110110100101100101110110101001101110101010101011010100110100101.公有属性的含义及其语法2.私有属性的含义及其语法0110111101101011110101111001000010110101010010011110115.get与set方法知识目标01121110110101101101001001100110101010010011011010010110010111011010100110111010101010101101010011010010掌握get方法的含义及其语法掌握set方法的含义及其语法掌握@property装饰器的含义及其语法get与set方法get和set方法(通常也被称为getter和setter方法)在面向对象编程中常用于封装对象的属性,以便控制对属性的访问和修改。classPerson:def__init__(self):self.gender="保密"person=Person()person.gender="中年"gender表示性别,有效值为“男”、“女”和“保密”。但这里的代码不会报任何错!使用get和set方法对属性的访问进行封装!get方法get方法用于获取属性的值。在Python中,可以通过定义一个返回属性值的普通方法来模拟该方法。get方法通常命名为get_<属性名>。classMyClass:def__init__(self,value):self._private_value=value

defget_value(self):returnself._private_value

#创建实例并访问属性值obj=MyClass(10)print(obj.get_value())#输出:10定义一个私有属性,对象不要直接读写该属性。定义一个get方法,对象通过调用该方法来获取私有属性的值通过调用get方法来获取私有属性的值classPerson:def__init__(self):self._gender="保密"defset_gender(self,gender):ifgender=="男"orgender=="女"orgender=="保密":self._gender=genderelse:raiseValueError("无效")#抛出异常person=Person()person.set_gender("男")set方法set方法用于设置属性的值。set方法通常命名为set_<属性名>。set方法应该接受一个参数,用于设置属性的值set方法可能还包含一些额外的逻辑,如验证输入或更新其他关联属性。定义一个私有属性,对象不要直接读写该属性。定义一个set方法,对象通过调用该方法来设置私有属性的值,其中包含一些验证逻辑。通过调用set方法来设置私有属性的值person=Person()person.set_gender("中年")set方法尝试设置一个无效值抛出异常!obj=MyClass(10)#输出:10print(obj.value)obj.value=20#输出:20print(obj.value)obj.value=-5@property装饰器使用@property装饰器来定义get方法,并使用@<属性名>.setter装饰器来定义set方法。这样做可以使属性访问看起来更像普通的属性访问,而不是方法调用。classMyClass:def__init__(self,value):self._value=value@propertydefvalue(self):returnself._value@value.setterdefvalue(self,new_value):self._value=new_value对一个方法定义使用@property装饰器该方法就相当于一个get方法。对一个方法定义使用@value.setter装饰器该方法就相当于一个set方法。@property装饰器使用@property装饰器来定义get方法,并使用@<属性名>.setter装饰器来定义set方法。这样做可以使属性访问看起来更像普通的属性访问,而不是方法调用。classMyClass:def__init__(self,value):self._value=value@propertydefvalue(self):returnself._value@value.setterdefvalue(self,new_value):self._value=new_valueobj=MyClass(10)#输出:10print(obj.value)obj.value=20#输出:20print(obj.value)obj.value=-5调用value的set方法就和访问value属性一样。@property装饰器使用@property装饰器来定义get方法,并使用@<属性名>.setter装饰器来定义set方法。这样做可以使属性访问看起来更像普通的属性访问,而不是方法调用。classMyClass:def__init__(self,valu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论