【文档说明】Python程序设计教程-07_用类实现抽象和封装.pptx,共(26)页,151.969 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2391.html
以下为本文档部分文字说明:
Python3程序设计主讲教师:7用类实现抽象和封装软件工程师系列Python3程序设计第7章面向对象程序设计本章内容面向对象程序设计概述创建类与对象构造方法和析构方法类的继承类的多态运算符重载面向对象程序设计的应用比程序
或函数更高层次的封装是面向对象程序设计,不仅封装了代码,也封装了操作的数据。面向对象使得软件开发更加灵活,更适用于大型软件的设计与开发。软件工程师系列Python3程序设计7.1面向对象编程概述面向对象程序设计的概念1.面向对象程序设计面向对象(OO)是符合人类思维习惯的编程思想
。基于面向对象思想的程序设计方法被称为面向对象的程序设计(ObjectOrientedProgramming)。2.与面向过程程序设计的比较把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来实现多个对象相互配合,完成应用程序功能。3.对象和类对
象(Object)将描述事物的一组数据和与这组数据有关操作封装在一起,形成一个实体,就是对象。具有相同或相似性质的对象的抽象就是类(Class)。软件工程师系列Python3程序设计7.1面向对象编程概述面向对象程序设
计的特点1.封装性将数据和对数据的操作组织在一起,定义一个新类的过程就是封装(Encapsulation)。2.继承性继承(Inheritance)描述了类之间的关系。继承的类(子类)可以对被继承的类(父类)的操作进行
扩展或重定义。3.多态性多态(Polymarphism)指类中的方法重载,即一个类中有多个同名(不同参数)的方法,方法调用时,根据不同的参数选择执行不同的方法。本章围绕封装、继承、多态讲解Python的面向对象程序设
计。软件工程师系列Python3程序设计7.2创建类与对象创建类面向对象的核心的是对象,创建对象之前先需要定义一个类。类是对象的抽象,用于描述一组对象的共同特征和行为。对象的特征(属性),用成员变量于描述,对象的行为(方法)用成员方法描述。使用class关键字来声明一个类。class类名
:类的属性(成员变量)…类的方法(成员方法)…软件工程师系列Python3程序设计7.2创建类与对象创建类类由3部分组成。●类名:类的名称,通常它的的首字母大写。●属性:用于描述事物的特征,比如人有姓名、年龄等。●方法:用于描述事物的行为
,比如,人有说话,微笑等行为。例7-1创建类的示例。软件工程师系列Python3程序设计7.2创建类与对象创建对象根据类创建对象。Python使用如下语法来创建一个对象。对象名=类名()例如,创建Dog类的一个对象dog。dog=Dog()dog实际上是一个变量
,可以使用它来访问类的属性和方法。可以给对象添加属性,格式如下:对象名.属性名=值例7-2创建对象示例。软件工程师系列Python3程序设计7.3构造方法和析构方法两个比较特殊的方法:__init__()和__d
el__(),分别用于初始化对象和释放对象所占用的资源。构造方法类中名字为__init__()的方法(以两个下画线“_”开头和结尾)被称为构造方法。用于完成对象数据成员设置初值或进行其他必要的初始化工作
。如果未定义构造方法,Python将提供一个默认的构造方法。例7-3使用无参数的构造方法创建对象。例7-4使得带参数的__init__()方法的构造对象。软件工程师系列Python3程序设计7.3构造方法和析构方法析构方法Python中的__del__()方法是析
构方法,与构造方法相反,用来释放对象占用的资源源。如果用户未定义析构方法,Python将提供一个默认的析构方法进行必要的清理工作。例7-5使用析构方法删除对象。软件工程师系列Python3程序设计7.3构造方法和析构方法self参数成员方法的第1个参数是
self。self的意思是自己,表示的是对象自身,当某个对象调用成员方法的时候,Python解释器会自动把当前对象作为第1个参数传给self,用户只需要传递后面的参数就可以了。成员方法的第1个参数
通常命名为self,但使用其他参数名也是合法的。例7-6self参数的使用。软件工程师系列Python3程序设计7.3构造方法和析构方法成员变量和类变量类中的变量分为两种类型:一种是成员变量,另一种是类变量。成员变量是在构造方法__init__()中定义的,定义时以self
作为第1个参数;类变量是在类中方法之外定义的。在类的的外部,成员变量属于实例(对象),只能通过对象名访问;类变量属于类,可以通过类名访问,也可以通过对象名访问,被类的所有对象共享。例7-7定义含有成员变量(名字n
ame、颜色color)和类变量(数量num)的Animal类。软件工程师系列Python3程序设计7.3构造方法和析构方法类方法和静态方法类中有以下4种方法:成员方法、普通方法、类方法、静态方法。成员方
法由对象调用,方法的第1个参数默认是self,构造方法和析构方法也属于成员方法;普通的方法即类中的函数,只能由类名调用;类方法和静态方法都属于类的方法。软件工程师系列Python3程序设计7.3构造方法和析构方法类方法和静态
方法1.类方法使用修饰器@classmethod来标识类方法。class类名:@classmethoddef类方法名(cls):方法体格式中,类方法的第1个参数为cls,代表定义类方法的类,通过cls参数可以访问类的属性
既可以通过对象名调用类方法,又可以通过类名调用类方法例7-8类中定义的实例方法和类方法。例7-9类方法的应用。软件工程师系列Python3程序设计7.3构造方法和析构方法类方法和静态方法2.静态方法使用修饰器@staticmethod来标识静态方法。class类名:@staticmet
hoddef静态方法名():方法体静态方法的参数列表中没有任何参数。由于静态方法没有self参数,所以它无法访问类的实例属性;静态方法也没有cls参数,所以它也无法访问类属性。静态方法跟定义它的类没有
直接的关系,只是起到类似于函数的作用。软件工程师系列Python3程序设计7.4类的继承继承的实现类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称作子类,被继承的类称作父类,子类会自动拥有父类所有可继承的属性和方法。class子类名(父类名):类的属
性类的方法例7-11类的继承示例,子类继承父类的方法。以两个下划线“__”开头的属性是私有属性,只在类的内部访问。以两个下划线“__”开头的方法是私有方法,只在类的内部访问。软件工程师系列Python3程序设计7.4类的继承方法重写在继承关系中,子类会自动拥有父类定义的方法。
如果父类的方法不能满足子类的需求,子类可以按照自己的方式重新实现从父类中继承的方法,这就是方法的重写。重写使得子类中的方法覆盖掉跟父类同名的方法,但需要注意,在子类中重写的方法要和父类被重写的方法具有相同的方法名和参数列表。例7-13子类重写父类的方法。super
()方法用于在继承过程中访问父类的成员。软件工程师系列Python3程序设计7.4类的继承Python的多继承一个子类存在多个父类的现象称为多继承。Python语言支持多继承,一个子类同时拥有多个父类的共同特征,即子类继承了多个父类的方法和属性。
多继承是在子类名称后的括号中标注出要继承的多个父类,并且多个父类之间使用逗号分隔。class子类(父类):属性描述方法描述例7-14多继承示例。软件工程师系列Python3程序设计7.5类的多态在同一个方法中
,这种由于参数不同而导致执行效果各异的现象就是多态。在Java或C#等强类型语言中,多态是指允许使用一个父类类型的变量来引用一个子类类型的对象来实现的。即根据引用子类对象特征的不同,得到不同的运行结果。Python的多态并不考虑对象的类型,而是关注对象具有的行为,
根据被引用子类对象特征的不同,得到不同的运行结果。Python的多态并不要求继承的存在。但继承关系的存在,对多态起到约束作用,可以使程序更为健状。软件工程师系列Python3程序设计7.6运算符重载运算符重载将运算符与类的方法关联起来,每个运算
符对应一个指定的内置方法。Python支持运算符重载功能,可以重载加减乘除等运算,也可以重载打印、索引、比较等内置运算,重载方法如下表。方法名运算符调用方式__add__x+y,x+=y__sub__x-y
,x-=y__div__x/y,x/=y__mul__x*y,x*-=y__mod__x%y,x%=y__repr__或__str__print(x)、repr(x)、str()__getitem__x[key],x[i:j]__setitem__x[key],x[i:j]=sequence__d
elitem__delx[key],delx[i:j]__eq__,__ne__x==y,x!=y__lt__,__le__x<y,x<=y__gt__,__ge__x>y,x<=y软件工程师系列Python3程序设计7.6运算符重载1.加法运算符重载和减法运算符重载
加法运算符重载是通过实现__add__()方法完成的,减法运算符重载是通过实现__sub__()方法完成的,当两个实例对象执行运算时,自动调用对应的方法。例7-16加法运算符重载和减法运算符重载的实现。软件工程师系列Python3程序设计7.6运算符重载2.__str__()方法重载和_
_ge__()方法重载重载__repr__()和__str__()方法可以将对象转换为字符串,在执行print()、str()、repr()等方法以及交互模式下直接打印对象时,会调用__repr__()和__str__()方法。__repr__()和
__str__()方法的区别是,只有print()、str()方法可以调用__str__()方法转换,而__repr__()方法在多种操作下都能将对象转换为自定义的字符串形式。__ge__()方法用于重载>=运算符。例7-17__str__()方法
重载和__ge__()方法重载的实现。软件工程师系列Python3程序设计7.6运算符重载3.索引和切片重载跟索引和切片相关的重载方法包括如下3个。(1)__getitem__()方法用于索引、切片操作,在对象执行索引、切片或者for迭代操作时,会自动调用该方法
。(2)__setitem__()方法索引赋值,在通过赋值语句给索引或者切片赋值时,调用__setitem__()方法实现对序列对象的修改。(3)__delitem__()方法使用del关键字删除对象时,调用__delitem__()方法实现删除。例7-18
中,重写了_getitem__()方法、__setitem__()方法、__delitem__()方法,实现对属性的索引、切片和删除操作。软件工程师系列Python3程序设计7.7面向对象程序设计的应用学生信息管理程序下面的程序实现学生信息的遍历、追加、修改
、删除和排序等功能,程序由3部分组成。●学生类Student,成员变量有id(序号),name(姓名),course(课程),重载了__repr__()方法。●学生的集合类StuList,承载多名学生信息。重载了索引和切片的方法。●主控程序。软件工程师系列Python
3程序设计小结面向对象程序设计中,类中的__init__()方法被称为构造方法,__del__()方法是析构方法。类中的属性也叫成员变量,分为两种类型:一种是实例属性,另一种是类属性。实例属性是在构造方法__init__()中定义的;类属性是在类中方法之外定义的属性。类中的方法分为成员
方法、普通方法、类方法、静态方法。类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称作子类,被继承的类称作父类,子类会自动拥有父类所有可继承的属性和方法。一个子类存在多个父关的现象称为多继承。运算符重载指的是将运算符与类的方法关联起来,每个运算符对应一个内置方法。软件工程
师系列Python3程序设计作业:(1)设计一个Student类,在该类中包括:一个数据成员score(分数)及两个类成员total(总分)和count(人数)。成员方法setScore(socre)用于设置分数,类
方法sum()用于返回总分,类方法average()用于求平均值。交互式输入某班学生成绩,显示全班总分和平均分。(2)设计一个整形数组的封装类,要求实现下列功能:●显示全部数组数据。●显示从某位置开始的一段连续数组数据。。软件工程师系列Python3程序设计