版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 面向对象程序设计面向对象程序设计主讲主讲 夏敏捷夏敏捷计算机学院副教授计算机学院副教授6.1 面向对象程序设计基础现实生活中的每一个相对独立的事物都可以看做一个对象,例如,一个人,一辆车,一台电脑等。对象是具有某些特性和功能的具体事物的抽象。每个对象都具有描述其特征的属性及附属于它的行为。面向对象程序设计是一种计算机编程架构,它具有以下3个基本特性。 (1)封装性(Encapsulation) (2)继承性(Inheritance) (3)多态性(Polymorphism) Python完全采用了面向对象程序设计的思想,是真正面向对象的高级动态编程语言,完全支持面向对象的基本功能,
2、如封装、继承、多态以及对基类方法的覆盖或重写。但与其他面向对象程序设计语言不同的是,Python中对象的概念很广泛,Python中的一切内容都可以称为对象,而不一定必须是某个类的实例。例如,字符串、列表、字典、元组等内置数据类型都具有和类完全相似的语法和用法。创建类时用变量形式表示的对象属性称为数据成员或成员属性,用函数形式表示的对象行为称为成员函数或成员方法,成员属性和成员方法统称为类的成员。6.2 类和对象 面向对象程序设计的一个关键性观念是将数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体,即对象。 对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类,面向对象程
3、序设计的关键就是如何合理地定义和组织这些类以及类之间的关系。6.2.1 类定义语法Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现。类名的首字母一般要大写,当然您也可以按照自己的习惯定义类名,但是一般推荐参考惯例来命名,并在整个系统的设计和实现中保持风格一致,这一点对于团队合作尤其重要。例如:class Car: def infor(self):print( This is a car ) 6.2.1 类定义语法定义了类之后,可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法,例如
4、下面的代码: car = Car() r() This is a car在Python中,可以使用内置方法isinstance()来测试一个对象是否为某个类的实例,下面的代码演示了isinstance()的用法。 isinstance(car, Car)True isinstance(car, str)Falseself参数 类的所有实例方法都必须至少有一个名为“self”的参数,并且必须是方法的第一个形参(如果有多个形参的话),“self”参数代表将来要创建的对象本身。在类的实例方法中访问实例属性时需要以“self”为前缀,但在外部通过对象名调用对象方法时并不需要传递这个参数
5、,如果在外部通过类名调用对象方法则需要显式为self参数传值。【例6-2】定义一个复数类Complex,构造函数完成对象变量初始化工作。class Complex: def _init_(self, realpart, imagpart): self.r = realpart self.i = imagpartx = Complex(3.0,-4.5)print(x.r, x.i)6.2.2 构造函数_init_Python中类的析构函数是_del_,用来释放对象占用的资源,在Python收回对象空间之前自动执行。如果用户未涉及析构函数,Python将提供一个默认的析构函数进行必要的清理工作。
6、6.2.3 析构函数class Complex: def _init_(self, realpart, imagpart): self.r = realpart self.i = imagpart def _del_(self): print(Complex不存在了)x = Complex(3.0,-4.5)print(x.r, x.i)print(x)del x#删除x对象变量实例属性属于实例(对象)只能通过对象名访问;类属性属于类可通过类名访问,也可以通过对象名访问,为类的所有实例共享。6.2.4 实例属性和类属性【例6-3】定义含有实例属性(姓名name, 年龄age)和类属性(人数nu
7、m)的Person人员类。class Person:num=1#类属性def _init_(self, str,n):#构造函数 = str#实例属性self.age=ndef SayHello(self): #成员函数print(Hello!)def PrintName(self): #成员函数print(姓名:, , 年龄:, self.age)def PrintNum(self): #成员函数print(Person.num)#由于是类属性,所以不写self .num#主程序P1= Person(夏敏捷,42)P2= Person(王琳,36)P1.P
8、rintName()P2.PrintName()Python并没有对私有成员提供严格的访问保护机制。在定义类的属性时,如果属性名以两个下划线“_”开头则表示是私有属性,否则是公有属性。私有属性在类的外部不能直接访问,需通过调用对象的公有成员方法来访问,或者通过Python支持的特殊方式来访问。Python提供了访问私有属性的特殊方式,可用于程序的测试和调试,对于成员方法也有同样性质。6.2.5 私有成员与公有成员class Car: price = 100000 #定义类属性 def _init_(self, c, w): self.color = c #定义公有属性color self. _
9、weight= w #定义私有属性_weight#主程序car1 = Car(Red,10.5)car2 = Car(Blue,11.8)print(car1.color)print(car1. _Car_weight)print(car1. _weight) # AttributeError 在类中定义的方法可以粗略分为3大类:公有方法、私有方法、静态方法。其中,公有方法、私有方法都属于对象,私有方法的名字以两个下划线“_”开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员;公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通
10、过“self”调用或在外部通过Python支持的特殊方式来调用。6.2.6 方法6.3 类的继承和多态6.3.1 6.3.1 类的继承类的继承class 派生类名(基类名):#基类名写在括号里 派生类成员class Parent: # 定义父类 parentAttr = 100 def _init_(self): print (调用父类构造函数) def parentMethod(self): print(调用父类方法) def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print( 父类属性 :, Par
11、ent.parentAttr) class Child(Parent): # 定义子类 def _init_(self): print( 调用子类构造函数) def childMethod(self): print(调用子类方法 child method)6.3.2 类的多继承Python的类可以继承多个基类。继承的基类列表跟在类名之后。类的多继承语法:class SubClassName (ParentClass1, ParentClass2, .): 派生类成员class A: # 定义类 A. class B: # 定义类 B. class C(A, B): # 派生类C继承类 A 和
12、B.6.3.3 方法重写 6.3.3 6.3.3 方法重写方法重写 重写必须出现在继承中。它是指当派生类继承了基类的方法之后,如果基类方法的功能不能满足需求,需要对基类中的某些方法进行修改,可以在派生类重写基类的方法,这就是重写。6.3.4 多态 多态的好处就是,当我们需要传入Dog、Cat、Tortoise时,我们只需要接收Animal类型就可以了,因为Dog、Cat、Tortoise都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态的意思。6.3.5 运算符重载
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年遵义市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)参考答案详解
- 广元市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(完整版)
- 大足县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(培优)
- 2026年巢湖市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(基础+提升)
- 伊犁州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(突破训练)
- 宁波市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(精练)
- 2026年遵义市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(能力提升)
- 白山市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及完整答案详解一套
- 2026年黔南布依族苗族自治州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(轻巧夺冠)
- 贵阳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(完整版)
- 第九章 静电场及其应用
- 2025年国家开放大学(电大)《组织行为学基础》期末考试备考试题及答案解析
- 水下玻纤灌浆施工方案
- 幼儿园静电课件
- 知识产权知识竞赛题库(含答案)
- 财务总监岗位招聘笔试题及解答(某大型团公司)2025年
- 团务知识技能培训方案课件
- 禅茶养生师初级考试试卷与答案
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 水冷壁安装施工方案
- 蛇咬伤的护理查房ppt课件
评论
0/150
提交评论