Python程序设计-教案-单元六 面向对象_第1页
Python程序设计-教案-单元六 面向对象_第2页
Python程序设计-教案-单元六 面向对象_第3页
Python程序设计-教案-单元六 面向对象_第4页
Python程序设计-教案-单元六 面向对象_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

《Python程序设计》教案单元六面向对象

教学内容设计学生信息管理系统教学目标素质目标:培养学生善于观察,提高对事物的归纳总结能力。培养团队合作的能力。增强使用抽象思维解决实际问题的能力。知识目标: 理解面向对象编程思想。掌握定义类和创建类的实例的方法。掌握类中变量和方法的应用。理解类成员和实例成员的区别。能力目标:能够通过面向对象设计学生信息管理系统,体会类的设计和对象的创建。教学重难点教学重点:Python中的类的定义、对象的定义、类的构造器构造方法。教学难点:Python中的面向对象编程。教学方法案例分析法、问答法、讨论法、讲授法、实训法教学用具电脑、投影仪、多媒体课件、教材教学设计教学过程主要教学内容及步骤设计意图课前任务【教师】布置课前任务,提醒同学通过学习软件,完成课前任务请大家自行搜集资料了解面向对象编程的概念,并且预习本任务需要的相关知识点。【学生】完成课前任务通过课前任务,使学生了解本次课的重要性,增加学生的学习兴趣考勤

(2min)【教师】清点上课人数,记录好考勤【学生】班干部交假条培养学生的组织纪律性,掌握学生的出勤情况新课预热

(10min)【教师】与学生简单互动,复习回顾上次课的内容等【学生】聆听、互动【教师】讲述本项目的作用和开设本项目的原因Python是真正面向对象的高级动态编程语言,它以类和对象作为面向对象编程的基础,具有封装、继承和多态三大基本特性,能够很好地支持代码复用和设计复用,使得代码具有更好的可读性和可扩展性。本项目将详细介绍Python中面向对象编程的方法。通过老师与学生的互动,并让学生了解这次课的知识点大致要求问题导入(5min)【教师】提出以下问题:(1)什么是对象?(2)什么是面向对象的编程?【学生】思考、举手回答【教师】通过学生的回答引入要讲的知识通过问题导入的方法,引导学生主动思考,激发学生的学习兴趣传授新知

(30min)一、面向对象的程序设计【教师】讲解Python中的面向对象的程序设计面向对象程序设计(ObjectOrientedProgramming,OOP)的思想主要针对大型软件设计而提出,它使得软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使得代码具有更好的可读性和可扩展性。Python完全采用了面向对象程序设计的思想,是真正面向对象的高级动态编程语言,完全支持面向对象的基本功能,如封装、继承、多态以及对基类方法的覆盖或重写。因此,掌握面向对象编程思想至关重要。面向对象是相对于面向过程而言的,它是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段的产物。面向过程编程主要是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用函数即可。面向过程编程的关注点在于怎么做,特点是:1)注重步骤与过程,不注重职责分工;2)如果需求复杂,代码会变得很复杂;3)开发复杂项目,没有固定的套路,开发难度很大。面向对象编程则是分析出需求中涉及哪些对象,这些对象各自有哪些特征、有什么功能,对象之间存在何种关系等,将存在共性的事物或关系抽象成类。最后通过对象的组合和调用完成需求。面向对象编程的关注点在于谁来做,在完成某一个需求前,首先确定职责——要做的事情(方法),根据职责确定不同的对象,在对象内部封装不同的方法(多个),最后就是顺序地调用不同对象的相应方法。特点是:1)注重对象和职责,不同的对象承担不同的职责;2)更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。【学生】聆听、记录、理解二、类的定义【教师】讲解Python中的类的定义Python中定义类的基本语法格式如下所示。class类名:#类的内部实现属性名=属性值def方法名(self):方法体对于类的定义,有如下规定:1)Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现。2)类名的首字母一般要大写,当然也可以按照自己的习惯定义类名,但一般推荐参考惯例来命名,并在整个系统的设计和实现中保持风格一致,这一点对于团队合作尤其重要。3)类的内部实现中一般包括属性的定义和方法的定义,且相对于class关键字必须保持一定的空格缩进。4)方法的定义语法与函数一样,也是使用def关键字,相当于定义在类里面的函数。但是,与类外的函数不同的是,类方法的第一个参数都是指向调用者实例的引用,在定义时一般都习惯用self作为参数名(也可以使用其他标识符作为参数名)。【教师】演示例6-1程序【学生】聆听、记录、理解三、创建对象【教师】讲解Python中的创建对象在Python中,创建对象的语法格式如下所示。对象名=类名()创建完对象后,可以使用它来访问类中的属性和方法,具体方法是:对象名.属性名对象名.方法名([参数])示例代码如下所示。>>>car=Car()>>>r()Thisisacar在Python中,可以使用内置方法isinstance()来测试一个对象是否为某个类的实例,isinstance()方法返回值是布尔类型。示例代码如下所示。>>>isinstance(car,Car)True>>>isinstance(car,Str)False通过上面的示例代码可以看出,对象car是类Car的一个实例,而对象car不是类Str的一个实例。【教师】演示例6-2程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解四、self参数【教师】讲解Python中的self参数类的所有实例方法都必须至少有一个名为self的参数,并且必须是方法的第一个形参(如果有多个形参的话),self参数代表将来要创建的对象本身。在类的实例方法中访问实例属性时需要以self为前缀。哪个对象调用了方法,方法里的self指的就是谁。通过“self.属性名”可以访问到这个对象的属性;通过“self.方法名()”可以调用这个对象的方法。在类的外部通过对象名调用对象方法时并不需要传递self参数,但是如果在外部通过类名调用对象方法则需要显式为self参数传值。【教师】演示例6-3程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】小拓展Python在类中定义方法时将第一个参数命名为self只是一个习惯,而实际上名称是可以改变的。例如:classA:defshow(my):print('hello!')a=A()a.show()上述代码中,将show()方法的第一个参数命名为my,程序运行结果为“hello!”。【学生】聆听、记录、理解五、类的构造器方法【教师】讲解Python中的构造方法Python里有一种方法,这种方法并不需要由用户显式调用,而是在实例化类时自动被调用,即称为“类的构造器(constructor)方法”。类的构造器方法在Python的类里提供,由两个下划线开始、两个下划线结束,且方法名字已经由Python官方定义好,不能乱写。(1)__init__()方法“__init__()”方法,又称“构造方法”,在创建一个对象时默认被调用,从而实现对对象进行初始化的操作。在开发中,如果希望在创建对象的同时,就设置对象的属性,可以重新实现“__init__()”方法来执行一些具体的初始化操作。【教师】演示例6-4程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解(2)__del__()方法创建对象后,Python解释器默认调用“__init__()”方法;而当删除对象时,Python解释器也会默认调用一个方法,这个方法为“__del__()”方法。需要注意的是:程序结束时会自动调用“__del__()”方法,也可以使用del语句手动调用“__del__()”方法删除对象。【教师】演示例6-5和例6-6程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】强调以下问题Python中每个类有且仅有一个构造方法,即便不手动为类添加任何构造方法,创建对象时,也会隐式地调用只包含self参数的构造方法。六、类成员和实例成员【教师】讲解Python中的类成员和实例成员Python类中定义的成员包括两种:类成员和实例成员,它们有以下两点区别。(1)类成员是在类中所有方法外定义的;实例成员一般是指在构造方法__init__()中定义的,在类中定义和使用时必须以self作为前缀。(2)类成员属于类,可以通过类名或对象名访问;而实例成员属于实例(即对象),在主程序中(或类的外部)只能通过对象名访问。【教师】强调以下问题与很多面向对象程序设计语言不同,Python允许在类外部动态地为类和对象增加成员,这是Python动态类型特点的重要体现。【教师】演示例6-7至例6-9程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】布置题目(1)以下程序的运行结果是__________。fromdatetimeimportdatetimeclasspro:name="computer" #定义类成员defsale_date(someday): #定义类方法someday=datetime(2021,7,29)print("该产品的销售日期是:",someday)computer=pro() #实例化对象print("该产品是:",) #访问类中的成员computer.sale_date()【学生】完成题目【教师】随机点名回答通过教师的讲解和演示,使学生了解Python中的面向对象编程的使用任务实施(15min)【教师】带领学生完成任务一✈【教师】提出任务随着时代的发展,学生信息化管理已经成为一个必不可少的重要环节。通过信息化管理,可以实现学生信息的收集、分析和处理,从而更好地为他们提供优质的教学服务。学生信息管理系统应具有添加学生信息、删除学生信息、修改学生信息和查询所有学生信息等功能,负责编辑学生的信息,适时地更新学生的资料。例如,新生入校,要在学生管理系统中录入刚入校的学生信息。本任务将带领大家编写Python程序,用面向对象编程思想设计学生信息管理系统。【学生】思考、讨论一、进行任务分析:完成本任务,用面向对象编程思想设计学生信息管理系统。要求可以在此系统中进实现以下操作功能:添加学生信息、删除学生信息、展示班级学生信息和查询学生信息。任务实施步骤:1.定义学生类,使用__init__()方法初始化实例成员学生姓名(name)、学号(num)、性别(sex)和年龄(age)。2.定义班级类,使用__init__()方法初始化实例成员班级名称(classname),以及add_stu()方法、del_stu()方法、show_stu()方法和get_stu()方法,add_stu()方法用于添加学生信息,del_stu()方法用于删除学生信息,show_stu()方法用于展示班级学生信息,get_stu()方法用于查询学生信息。3.实例化班级对象myClass1,分别调用成员方法add_stu()、del_stu()、show_stu()和get_stu()。4.使用while循环实现主程序入口,提示用户选择功操作,然后获取用户选择的功能,最后根据用户的选择,分别调用不同的方法。二、参考代码:classStudent:#学生类def__init__(self,name,num,sex,age):=nameself.num=numself.sex=sexself.age=agedef__str__(self):return'姓名:{}学号:{}性别:{}年龄:{}'.format(,self.num,self.sex,self.age)classClass:#班级类def__init__(self,classname):self.classname=classnameself.stu_list=[]self.stu_dict={}defadd_stu(self,stu):#添加学生self.stu_list.append(stu)self.stu_dict[stu.num]=studefdel_stu(self,num):#删除学生s=self.stu_dict.pop(num)#从字典中弹出并删除self.stu_list.remove(s)#从列表中删除defshow_stu(self):#展示学生信息forsinself.stu_list:print(s)defget_stu(self,num):#查找学生returnself.stu_dict.get(num)myClass1=Class('1班')#创建班级实例对象三、代码运行四、代码分析(主要代码):【学生】聆听、记录、理解通过任务实施环节,让学生将所学知识与实践相结合,培养学生的实操能力实操练习(15min)【教师】布置任务编写Python程序,学生信息管理系统。【教师】巡堂辅导,及时解决学生遇到的问题;安排每组做得最快、最好的学生辅导其他学生进行操作,并解答其遇到的问题【学生】对比自己的绘制结果,若绘制有误,查找并记录原因通过实操练习使学生巩固所学知识,并以学生为主体,针对学生接受能力的差异性,让优秀学生带动其他学生掌握知识课堂小结

(3min)【教师】简要总结本节课的要点(1)面向对象程序设计思想是把事物的属性和行为包含在类中。其中,事物的属性作为类的变量,事物的行为作为类的方法,而对象则是类的一个实例。因此,想要创建对象,需要先定义类。(2)Python中使用class关键字声明类;类名必须是合法标识符,类名的首字母一般大写;类名后必须紧跟冒号;类体相对于class关键字必须保持一定的空格缩进。(3)带self参数的方法称作实例方法,在类的实例方法中访问实例变量时,须以self为前缀,但在外部通过对象名调用实例方法时不需要传递该参数。【学生】总结回顾知识点总结知识点,巩固学生对Python中的面向对象编程相关知识的印象作业布置

(2min)【教师】布置课后作业定义水果类Fruit,包含水果名、产地和单价3个变量,定义setXxx()方法和getXxx()方法读写变量的值。然后创建3个水果类的对象,设置和输出3种不同水果的信息。【学生】完成课后任务通过课后作业复习巩固学到的知识,提高实际操作能力教学反思本次课讲授的主要是Python中的面向对象编程知识点,通过知识点的学习和实践,让学生对Python中的面向对象编程有了更深入的了解。本次课程学生信息管理系统为任务,引出本次课涉及到的知识点,提高了学生的学习兴趣,不仅掌握了Python的知识,也对抽象的对象和类有了概念。

教学内容开发“人机猜拳”游戏教学目标素质目标:培养学生严谨细致的作风和认真负责的良好习惯。增强使用抽象思维解决实际问题的能力。知识目标: 掌握面向对象的三大特性(封装、继承和多态)及相关知识的应用。 能力目标:能够在任务中掌握封装、继承和多态的用法。能够利用面向对象的特性开发“人机猜拳”游戏。教学重难点教学重点:Python中封装、继承、多态的定义。教学难点:Python中封装、继承、多态的使用。教学方法案例分析法、问答法、讨论法、讲授法、实训法教学用具电脑、投影仪、多媒体课件、教材教学设计教学过程主要教学内容及步骤设计意图课前任务【教师】布置课前任务,提醒同学通过学习软件,完成课前任务请大家自行搜集资料了解封装、继承、多态的概念,并且预习本任务需要的相关知识点。【学生】完成课前任务通过课前任务,使学生了解本次课的重要性,增加学生的学习兴趣考勤

(2min)【教师】清点上课人数,记录好考勤【学生】班干部交假条培养学生的组织纪律性,掌握学生的出勤情况新课预热

(10min)【教师】与学生简单互动,复习回顾上次课的内容等【学生】聆听、互动【教师】概括本次课总体学习内容,让学生大体了解本次课学习内容面向对象编程具有封装、继承和多态三大特征。通过老师与学生的互动,并让学生了解这次课的知识点大致要求问题导入(5min)【教师】根据预习回答以下问题:(1)什么是封装?(2)什么是继承?(3)什么是单继承?(4)什么是多继承?(5)什么是方法重写?(6)什么是多态?【学生】思考、举手回答【教师】通过学生的回答引入要讲的知识通过问题导入的方法,引导学生主动思考,激发学生的学习兴趣传授新知

(30min)一、封装【教师】讲解Python中的封装封装是面向对象编程的核心思想,它将对象的属性和行为封装起来(其载体是类),隐藏其实现细节,用户只需通过接口来操作对象。好比用户使用计算机时,通过键盘就可以实现一些功能,无须知道计算机内部是如何工作的。具体来说,封装有两个层面的含义。(1)将客观事物封装成抽象的类,类中的变量和方法只能通过类名或对象名加“.”的方式来访问,前面介绍的例子其实都是这一层面的封装。(2)将类的某些变量和方法隐藏在类内部,不允许用户直接访问,或者留下少量的方法供外部访问。为了更好地实现数据的封装和保密性,可以将类中的变量和方法设置成私有的,然后在类中定义一个方法(也称接口函数),在它内部访问被隐藏的变量和方法,而外部可以通过接口函数进行访问。在Python中,私有化变量或方法时只需在名字前加两个下划线“__”即可。【教师】演示例6-10至6-12程序【学生】观察运行结果并讨论【学生】聆听、记录、理解【教师】强调以下问题Python目前的私有机制其实是伪私有,实际上,在外部可以通过“_类名__属性”访问私有变量和调用私有方法【教师】布置题目(1)以下程序的运行结果是_______。classfruit:#定义类def__init__(self):self.__price=10#定义私有变量并赋值为10def__type(self):#定义私有方法print('红富士')defbar(self):#定义接口函数self.__type()#类内部访问私有方法returnself.__price#返回私有变量price的值a=fruit()#创建对象b=a.bar()#调用接口函数,将返回值赋给bprint(b)#输出b的值【学生】完成题目【教师】随机点名回答二、继承【教师】讲解Python中的函数的继承继承是面向对象程序设计中两个类之间的一种关系,是指从已有的类中派生出新的类。被继承的类称为基类或父类,继承父类的类称为子类或派生类。子类可以继承父类的属性和行为,还可以增加自己的属性和行为。例如,自行车类有品牌、外观等属性,刹车、加速等行为,而双人自行车继承了自行车类(父类)的属性和行为,还增加了后座这个属性。子类还可以改变从父类继承来的行为。例如,杂技演员使用的自行车不仅可以前进,还可以后退,这就改变了自行车类的行为。继承使父类的代码得到重用,在继承父类提供的共同特性的基础上增加新的代码,可以大幅度减少开发工作量,并且可以很大程度地保证质量。继承分为单继承和多继承两种。1.单继承在Python中,当一个子类只有一个父类时称为单继承。定义子类的语法格式如下。class子类名(父类名):子类可以继承父类的所有公有变量和公有方法,但不能继承其私有变量和私有方法。【教师】演示例6-13程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】强调以下问题Python中pass表示空语句,即不执行任何操作,一般用作占位语句,保持程序结构的完整性。2.多继承多继承指一个子类可以有多个父类,它继承了多个父类的特性。例如,沙发床是沙发和床的功能的组合,儿子喜欢做爸爸和妈妈喜欢做的事。多继承可以看作是对单继承的扩展,其语法格式如下。class子类名(父类名1,父类名2……):【教师】演示例6-14程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】强调以下问题在Python中,如果两个父类中有同名的方法,那么调用该同名方法时会调用先继承的类中的方法。例如,如果DadLikeDo类和MomLikeDo类中有同名的方法,用“classSonLikeDo(DadLikeDo,MomLikeDo):”语句定义子类时,子类会先继承DadLikeDo类。3.方法重写当父类中的方法无法满足子类需求或子类具有特有功能时,可以在子类中重写父类的方法,即子类中的方法会覆盖父类中同名的方法,以实现不同于父类的功能。【教师】演示例6-15程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)如果需要在子类中调用父类的方法,可以使用内置函数super()或通过“父类名.方法名()”来实现。【学生】聆听、记录、理解【教师】演示例6-16程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解【教师】布置题目(1)以下程序的运行结果是________。classfruit: #定义一个父类name='香蕉'place='海南'defspeak(self): #定义方法用于输出print('这里的{}来自{}'.format(,self.place))classapple(fruit): #定义一个子类,继承fruit类defsetName(self,newName): #定义方法用于修改名字=newNamedefsetPlace(self,newPlace):self.place=newPlacedefapple_speak(self): #定义方法用于输出print('这里的{}来自{}'.format(,self.place))apple_1=apple() #创建学生对象print('水果的名称为:',apple_1.name) #输出水果的名称print('水果的产地为:',apple_1.place) #输出水果的产地apple_1.apple_speak() #调用子类方法用于输出apple_1.setName('红富士') #调用子类方法用于修改名字apple_1.setPlace('烟台')apple_1.speak() #调用父类方法用于输出【学生】完成题目【教师】随机点名回答三、多态【教师】讲解Python中的函数的多态在Python中,多态指的是一类事物有多种形态,如一个父类有多个子类,因而多态的概念依赖于继承。而多态性可以这样描述:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应同一消息(调用函数)。【教师】演示例6-17程序【学生】观察运行结果并讨论【教师】讲解程序(主要代码)【学生】聆听、记录、理解通过教师的讲解和演示,使学生了解Python中的封装、继承和多态的使用任务实施(15min)【教师】带领学生完成任务二✈【教师】提出任务“人机猜拳”游戏需要实现的功能是通过用户键盘和计算机进行猜拳比赛,用户所选择的手势由用户输入,计算机的手势则随机产生。猜拳游戏一般包含三种手势:石头、剪刀、布,判定规则为:石头胜剪刀、剪刀胜布、布胜石头。根据猜拳的游戏规则对用户和计算机选择手势进行判断哪方获胜。本任务将带领大家利用Python中类的继承,开发“人机猜拳”游戏。【学生】思考、讨论一、进行任务分析:完成本任务,开发一个基于面向对象的“人机猜拳”游戏。猜拳游戏一般包含三种手势:石头、剪刀、布,判定规则为石头胜剪刀,剪刀胜布,布胜石头。任务实施步骤:1.定义用户类,在用户类中的初始化方法中定义字典类型属性,存储“剪刀”、“石头”、“布”三种手势,如{0:'剪刀',1:'石头',2:'布'}。2.定义计算机类,继承用户类。由于在“人机猜拳”游戏中,人表示用户,机表示计算机,所以用户所选择的手势由用户输入,计算机的手势则可以随机产生。然后,为了增加计算机获胜的概率,我们可以将用户输入的手势保存在一个列表中,通过计算该列表中用户最大概率的手势生成计算机获胜的手势。3.定义游戏类,根据猜拳的游戏规则对用户和计算机选择手势进行判断哪方获胜,并输出计算机生成的手势。二、参考代码:classPlayer:#用户类def__init__(self):self.dict={0:'剪刀',1:'石头',2:'布'}defgesture(self):#手势方法player_input=int(input("请输入(0剪刀、1石头、2布:)"))returnself.dict[player_input]classAIPlayer(Player):#计算机类,继承用户类play_data=[]defai_gesture(self):whileTrue:#循环computer=random.randint(0,2)iflen(self.play_data)>=4:#获取玩家出拳的最大概率max_prob=max(self.play_data,key=self.play_data.count)ifmax_prob=='剪刀':return'石头'elifmax_prob=='石头':return'布'else:return'剪刀'else:returnself.dict[computer]classGame:#游戏类defgame_judge(self):player=Player().gesture()AIPlayer().play_data.append(player)aiplayer=AIPlayer().ai_gesture()if(player=='剪刀'andaiplayer=='布')or\

温馨提示

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

评论

0/150

提交评论