Python程序设计与应用课件 第7章 面向对象程序设计_第1页
Python程序设计与应用课件 第7章 面向对象程序设计_第2页
Python程序设计与应用课件 第7章 面向对象程序设计_第3页
Python程序设计与应用课件 第7章 面向对象程序设计_第4页
Python程序设计与应用课件 第7章 面向对象程序设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计与应用类和对象学习目标知识目标

理解面向对象程序设计的思想;

掌握类的定义、类的对象的创建与使用方法;

掌握类的属性与方法的使用;

掌握类的私有成员和公有成员的使用方法。技能目标

能够根据实际情况定义合适的类、创建所定义类的对象并正确使用;

能够根据实际情况使用类的属性和方法;

能够使用面向对象程序设计的思想编写程序。素质目标与课程思政

深刻理解继承和发扬的内在联系,传承和发扬民族品牌;

传承实事求是、科学创新、艰苦奋斗和乐于奉献的精神。知识导图第7章

面向对象程序设计7.1面向对象程序设计思想7.2类与对象7.3属性与方法7.4

公有成员与私有成员7.5应用实例7.1面向对象程序设计思想面向对象程序设计是一种经典的自下而上的程序设计思想。对象(Object)是对客观世界中所存在事物的统称。面向对象(ObjectOriented,OO)程序设计的主要思想是通过对客观世界中事物的深度理解和进一步抽象,抽取事物中共有的本质的数据和对数据的操作方法,并把数据和其操作方法封装在一起组成一个整体。7.1面向对象程序设计思想抽象出来的整体称为类(class),数据称为属性(arrtribute),对其数据的操作称为方法(method)或行为,具体化的个体称为对象(object)。类是一个集合,其个体是对象,对象之间可通过消息机制来通信或同步。类是程序的基本单位,类之间的数据成员交换是以函数为接口实现。7.1面向对象程序设计思想面向对象程序设计具有三大特征:封装、继承和多态(1)封装(Encapsulation)。把对象的数据(属性)及其数据的操作方法封装在一起,形成抽象的类,称之为封装。类的内部信息对外界是隐藏的,外界只能通过相应的接口与类的对象建立关联,而且类可以选择性地把其自身的数据、方法让可信的对象或者类进行调用。这样可提高代码的安全性和复用性。封装为构建模块化的软件结构提供了良好的基础。7.1面向对象程序设计思想面向对象程序设计具有三大特征:封装、继承和多态(2)继承(Inheritance)。从一个已有的类可以构造出新类。这个已有的类成为父类,新类成为子类。子类不仅继承了父类的所有属性和方法,而且还可以具有新的属性和方法。继承是后者延续前者某方面的特点,在面向对象程序设计中,是子类对父类的某些属性或方法等进行复制或者延续,这样可提高其代码的复用性和扩展性。7.1面向对象程序设计思想面向对象程序设计具有三大特征:封装、继承和多态(3)多态(Polymorphism)。不同的对象接收相同的消息可能产生完全不同的行为,即具有多种形态,简称多态。多态可提高了程序的复用性和扩展性。7.2类与对象7.2.1类7.2.2对象7.2类与对象类是面向对象程序设计中最基本的数据结构,是对具有相同特征或行为的事物的一个统称,是抽象的。但类可以创建对象,对象是具体的,可以直接使用。可见类和数学中集合的概念相似,对象相当于集合中的元素。7.2.1类类用来描述具有相同的数据(属性)和方法的对象集合,即定义了一个集合中每个对象所共有的属性和方法,相当于把数据和操作方法绑定在一起。在Python中类由类名、类的属性和类的方法构成。Python使用关键字class来声明类,语法格式如下:class类名:"""类文档字符串"""类体7.2.1类其各部分说明如下:(1)类名是一个按照Python的命名规范给出的标识符。为了和函数名区别,类名的首字母大写,其他字母小写。为了代码的可读性,类名应该带有某种特定的含义,一般以有意义的单词或缩写进行命名,以达到“见名知意”的效果。类名后面的冒号“:”不能省略,冒号表示类体的开始。(2)类文档字符串是描述类信息的字符串,是一个用三引号括起来的字符串,位于类体的最前面。类定义之后,可通过类名.__doc__属性来访问,获得该字符串中的信息。在集成开发环境中,通常在类实例化时系统会自动提示该类文档字符串内容。7.2.1类(3)类体是对其属性及其方法的定义。类属性的定义相当于把变量的定义放到了类的内部。定义类属性时,给出其相应的变量名和初始值即可。方法也是函数,类的方法也叫类的函数,但是类的方法第一个参数通常是self,也可以使用其它有意义的标识符。类体中的语句相对于关键字class要有相同的缩进。7.2.1类类中定义的属性和方法均是类的成员。Python支持创建空类,只需要指定类体为pass即可。【例7.1】定义一个空类Myclass。参考程序代码如下:classMyclass:"""这是一个空的Myclass类"""pass7.2.1类【例7.2】自定义类Myclass。定义两个属性a和b,它们的值分别为3和5,定义一个类方法Mymethod(),其功能是实现把a和b的值分别赋值给变量m和n。参考程序代码如下:classMyclass:"""一个简单的Myclass类"""a=3b=5defMymethod(self,a,b):#类方法的第一个参数通常为selfm=an=bprint("m=",Myclass.a,"n=",Myclass.b)运行程序,其结果为:m=3n=5查看类的属性及方法有两种:使用内置函数dir()和使用访问类的字典内置属性__dict__。前者的返回类型是列表,后者的返回类型是字典。7.2.2对象类的对象是通过类创建出来的一个具体存在元素,可以直接使用。对象由哪一个类创建出来,就具备在那一个类中定义的属性和方法。类的对象也有自己的数据类型,可以通过内置函数type()进行查看。每个对象都有自己的唯一的标识符,可以通过内置函数id()进行查看。每个对象都有自己的属性和方法(行为)。属于同一类的对象其方法是相同的,但每个对象的属性是独立的。例如,计算机是一个大类,具有颜色、尺寸、操作系统型号、硬盘型号等属性;但每台计算机所具有的这些属性值可能各不相同。7.2.2对象【例7.3】创建类的实例化对象,并通过该对象访问该类的属性。参考程序代码如下:classComputer:#定义一个Computer类kind="华为"#定义类属性defask_kind(self):#定义实例方法print("Computer.kind:"+Computer.kind)aa=Computer()#创建类实例化对象print(aa.kind)#访问实例aa的kind属性本例定义了一个Computer类,aa是Computer类的实例化对象,通过对象aa访问kind属性。运行程序,其结果为:

华为7.3属性与方法7.3.1属性7.3.2方法7.3属性与方法属性和方法是面向对象程序设计的两个重要概念。属性用于存储描述类的特征值,也就是用于存储类中的数据变量。方法是对类中属性的操作,可理解为类中定义的函数。7.3.1属性类的数据成员称为类的属性,即在类里定义的数据变量。类定义里包含两种属性:类属性和实例属性,其中类属性被类及类的所有实例共享,在内存中仅有一个副本。可通过类名或实例名进行访问。访问类属性的格式有以下两种:类名.属性或实例名.属性。【例7.4】创建实例对象,通过实例对象的访问类属性和类方法。7.3.1属性本例定义一个Computer类,类中包含了属性kind和方法ask_kind()。aa=Computer()相当于创建了一个实例化对象aa。类属性kind为类和该类的实例共享;Computer.kind是通过类名访问kind属性;aa.ask_kind()是通过对象aa调用ask_kind()类方法,类方法通过类名与点号“.”运算符进行引用。运行程序,其结果如下图所示:7.3.1属性实例属性为实例对象私有,被保存在实例对象中。实例属性一般通过__init__()构造方法进行初始化,其第一个参数必须是self,后面的参数可根据实际情况自定义。【例7.5】为Phone类创建实例化对象phoneA和phoneB,并添加对象phoneA的属性。7.3.1属性7.3.1属性本例定义了一个Phone类,kind="华为"是一个类属性,在内存中只有一个副本,可供Phone类和其类中的所有方法公用。类属性brand和price与kind属性类似。call_ing()方法访问name实例属性。phoneA和phoneB是Phone类的两个实例化对象;print(phoneA.kind+phoneA.name+":"+phoneA.brand)是输出对象phoneA访问phone类的kind、name和brand的属性值;phoneA.color="white"是为对象phoneA添加color属性,该属性为对象phoneA私有,对象phoneB不能访问。7.3.1属性phoneA和phoneB是两个不同的Phone类实例化对象,其类中的属性和方法无需重新定义,多个对象都可访问。运行程序,其结果如下图所示:7.3.2方法Python中常用的类的方法有实例方法、类方法和静态方法。1.实例方法实例方法是在类中定义的经常使用的方法,其首个参数是self。self是实例对象本身,表示当前类的实例对象,对象可以调用所属类的属性和方法,也就是说self可以调用所属类的属性和方法。定义实例方法的语法格式如下:class类名:def方法名(self,[其它参数列表]):方法体7.3.2方法其中,类名和类中方法及方法体都保持有相对的缩进。[其它参数列表]中的参数是可选项。调用方法的格式为:类名.方法名(self,[其它参数列表])如果类中定义的方法,第一个参数不是self,则表示该方法不是实例方法,它只是类中定义的函数而已,不需要对象引用,直接加类名引用。7.3.2方法【例7.6】通过实例对象调用实例方法参考程序代码如下:classPhone:defcall_ing(self,name):#定义Phone类的call_ing方法=nameprint(+":打电话")#call_ing方法访问name实例属性phoneA=Phone()#为Phone类实例化对象phoneAphoneA.call_ing("电话A荣耀X50")#实例化对象phoneA访问call_ing()方法7.3.2方法上面例子中call_ing(self,name),第一个参数是self,因此call_ing(self,name)是Phone类中定义的方法(不是类中定义的函数),实例方法中的参数self不能缺少,用于指代调用call_ing()方法的Phone类的实例;phoneA=Phone("电话A荣耀X50")是Phone类的实例化,通过实例化对象phoneA访问call_ing()方法。运行程序,其结果如下图所示:7.3.2方法【例7.7】类中定义函数。参考程序代码如下:classPhone:defcall_ing(name):print(name+":打电话")Phone.call_ing(“电话A荣耀X50”)运行程序,其结果如下图所示:7.3.2方法从上面的例子可以看出,类内定义的函数和类外定义的函数其语法是一致的,其区别在于类内定义的函数包含在类体中;类内函数调用时,需要加上类名加以引用,不需要创建类的实例对象。而一般函数调用时,只需要通过函数名即可调用。从例7-6和例7-7可以看出,类中定义的函数和类中定义的方法其区别在于第一个参数是否是self,若是self,则是方法,用实例化对象来引用;若不是self,则是函数,引用时需要在函数前加上所属类名。在调用实例方法前,必须创建一个实例化对象,只有实例化对象才能调用实例方法,而且实例方法至少应该有一个self参数。7.3.2方法2.类方法调用实例方法前需要创建实例化对象,如果没有实例化对象又想调用实例方法,则可以使用Python提供的“类方法”。类方法以cls作为第一个参数,cls表示类本身,定义时,使用“@classmethod”作为标识符。定义类方法的语法格式如下:class类名:@classmethoddef方法名(cls,[args]):方法体参数cls是对类本身的引用,因此传入的参数是类变量,不能是实例变量;[args]是可选参数。调用类方法的语法格式如下:

类名.方法名(cls,[args])7.3.2方法【例7.8】类方法的使用。参考程序代码如下:classPhone:@classmethod

#类方法标识符defcall_ing(cls,name):print(name+"打电话")Phone.call_ing("华为mate60pro")#调用call_ing()方法这里需要注意的是,@classmethod标识符不能缺少,参数cls指代调用call_ing()方法的Phone类;类方法直接以类名进行调用,也可以通过实例对象进行调用。为了便于区分,一般用类对象调用类方法,实例对象调用实例方法。7.3.2方法3.静态方法定义静态方法时需要用关键字“@staticmethod”作为标识符。与实例方法和类方法不同,静态方法没有参数限制,既不需要实例参数,也不需要类参数。定义静态方法的语法格式如下:class类名:@staticmethoddef方法名([args]):方法体调用静态方法的语法格式如下:类名.方法名([args])7.3.2方法【例7.9】静态方法的使用。参考程序代码如下:classPhone:@staticmethod#静态方法标识符defcall_ing(name):print(name+"打电话")Phone.call_ing("华为荣耀X50")定义静态方法时,@staticmethod不能缺少。静态方法调用时不需要创建实例对象,直接以类名引用即可。7.4公有成员与私有成员7.4.1公有成员7.4.2私有成员7.4公有成员与私有成员为了限制类外成员对类内部成员的访问,Python将成员分为公有成员和私有成员。但与C++和Java不同,Python没有提供专用的关键字对成员访问权限进行限制。在默认情况下Python类中的成员是公有的,可以通过在成员前添加双下划线前缀的方式指定私有成员,以实现类内成员对外部访问的成员隐藏性,而允许外部访问的类的成员可暴露出来。7.4.1公有成员在Python类的定义中,允许外部访问的成员称为公有成员。这里的外部是指类体的外部。【例7.10】Python公有成员的使用。7.4.1公有成员值得注意的是对于公有的类属性name,无论是在类体外还是类体内,均可通过“类名.类属性”的方式访问,也可通过实例化对象进行访问。对于公有的实例方法showName(),在类体外,可通过“实例对象.实例方法”的方式访问,也可通过“类名().实例方法”进行访问。运行程序,结果如下图所示。7.4.2私有成员在Python类的定义中,不允许外部访问的成员称为私有成员。私有成员可以被类中的其他成员访问,但不能被外部成员访问。类的私有成员通过在成员前加2个英文下划线“__”来标识。7.4.2私有成员【例7.11】私有成员的使用。7.4.2私有成员通过例7.11可以发现,Teacher类体内的show_salary方法可以访问该类中的__salary()方法;语句print(Teacher.__name)是类外试图访问私有类属性,运行程序报错;语句Teacher().__salary()类外试图访问类的私有实例方法,运行程序报错(AttributeError);而show_salary()是公有方法,可以在类外部访问,即Teacher().show_salary()正确。总结如下,在Python中,公有成员(包括公有属性或公有方法)在类体的内外均可以被访问,私有成员只能在类体中被访问。7.5应用实例【7.12】某工厂工人分为以下几类

温馨提示

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

评论

0/150

提交评论