项目八 类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)

2024-08-02
| 41页
| 47人阅读
| 6人下载
普通

内容正文:

项目八 类与对象 Contents 类的定义和创建实例 类中属性和方法 构造方法和析构方法 类的定义 PART 01 根据操作数据的函数或语句块来设计程序的,称为面向过程的编程。 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。 面向对象 4 类和对象的关系即数据类型与变量的关系 根据一个类可以创建多个对象,而只能是某一个类的对象。 类规定了可以用于存储什么数据,而对象用于每个对象实际存储数据,每个对象可存储不同的数据。 类与对象 5 例如,有一个学生类,其中包括学号和姓名两个属性,则根据学生类可以创建多个学生对象,每个学生对象可以具有不同的学号和姓名信息。 类与对象 6 在一个类中,包含属性和各种方法 属性对应一个类可以用来保存哪些数据 方法对应一个类可以支持哪些操作(即数据处理) 类的定义形式多样 可以直接创建新的类 也可以基于一个或多个已有的类创建新的类 可以创建一个空的类,然后再动态添加属性和方法 也可以在创建类的同时设置属性和方法 类的定义 7 class 类名: 语句1 语句2 …… 语句N 类的定义形式如下所示: 1 class Student: #定义一个名字为Student的类 2 pass #一个空语句,起到占位作用,表示Student类中没有任何属性和方法 下面是一个最简单的类的定义方法,即定义一个空类。 类的定义 代码缩进 4个空格 正文缩进1.27厘米 8 创建实例 PART 02 创建实例 【任务描述】 创建一个类 根据类创建一个实例 【关键步骤】 创建一个类 根据类创建一个实例 示例01 代码缩进 4个空格 正文缩进1.27厘米 10 类名(参数表) 定义了一个类后,就可以创建该类的实例对象,其语法格式如下所示: 1 class Student: #定义一个名字为Student的类 2 pass #一个空语句,起到占位作用,表示Student类中没有任何属性和方法 3 if __name__=='__main__': 4 stu=Student() #创建Student类的对象,并将创建的对象赋给变量stu 5 print(stu) #输出stu 其中,参数表是指创建对象时传入的参数。下面给出不传递参数情况下创建对象的程序示例 程序执行完毕后,将在屏幕上输出如下结果: <__main__.Student object at 0x00000216EE7DF0F0> 从输出结果中可以看到,stu是Student类的对象,其地址为0x00000216EE7DF0F0。 创建实例 示例01 代码缩进 4个空格 正文缩进1.27厘米 11 类属性和普通方法的定义及其访问 PART 03 1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 属性即对应一个类对象可以保存的数据。可以直接在定义类时指定该类的属性,即类属性。 类名或对象名.属性名 对类属性的访问,既可以直接通过类名访问,也可以通过该类的对象访问 类属性定义及其访问 代码缩进 4个空格 正文缩进1.27厘米 13 类属性定义及其访问 【任务描述】 了解类属性定义及其访问 【关键步骤】 了解类属性定义及其访问 示例02 代码缩进 4个空格 正文缩进1.27厘米 14 1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 3 if __name__=='__main__': 4 print('第4行输出:',Student.name) 5 stu1=Student() #创建Student类对象stu1 6 stu2=Student() #创建Student类对象stu2 7 print('第7行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 8 Student.name='未知' #将Student的类属性name赋为“未知” 9 print('第9行输出:',Student.name) 10 print('第10行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 11 stu1.name='李晓明' #将stu1的name属性赋值为“李晓明” 12 stu2.name='马红' #将stu2的name属性赋值为“马红” 13 print('第13行输出:',Student.name) 14 print('第14行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 15 Student.name='学生' #将Student的类属性name赋为“学生” 16 print('第16行输出:',Student.name) 17 print('第17行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 类属性的访问示例 类属性定义及其访问 示例02 代码缩进 4个空格 正文缩进1.27厘米 15 执行程序后,则在屏幕上会输出如下结果: 第4行输出: Unknown 第7行输出:stu1 Unknown,stu2 Unknown 第9行输出: 未知 第10行输出:stu1 未知,stu2 未知 第13行输出: 未知 第14行输出:stu1 李晓明,stu2 马红 第16行输出: 学生 第17行输出:stu1 李晓明,stu2 马红 类属性定义及其访问 示例02 代码缩进 4个空格 正文缩进1.27厘米 16 1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 3 if __name__=='__main__': 4 stu1=Student() #定义Student类对象stu1 5 stu2=Student() #定义Student类对象stu2 6 stu1.age=19 #为对象stu1动态绑定新的属性age 7 print('stu1姓名:%s,年龄:%d'%(stu1.name,stu1.age)) #输出姓名和年龄 8 #print('stu2年龄:'%stu2.age) #取消注释则该语句会报错 9 #print('使用类名访问年龄属性:'%Student.age) #取消注释则该语句会报错 Python作为一种动态语言,除了可以在定义类时指定类属性外,还可以动态地为已经创建的对象绑定新的属性。 执行程序后,则在屏幕上会输出如下结果: 姓名:Unknown,年龄:19 类属性定义及其访问 示例02 代码缩进 4个空格 正文缩进1.27厘米 17 类中的方法实际上就是执行某种数据处理功能的函数。 与普通函数定义一样,类中的方法在定义时也需要使用def 关键字。 类中的方法分为两类:普通方法和内置方法 普通方法需要通过类的实例对象根据方法名调用 内置方法是在特定情况下由系统自动执行 类中普通方法定义及调用 18 实例对象名.方法名(实参列表) 在定义类的普通方法时,第一个参数需要对应调用方法时所使用的实例对象(一般命名为self,但也可以改为其他名字)。当使用一个实例对象调用类的普通方法时,其语法格式为: 类中普通方法定义及调用 代码缩进 4个空格 正文缩进1.27厘米 19 类中普通方法定义及调用 【任务描述】 了解类中普通方法定义及调用 【关键步骤】 了解类中普通方法定义及调用 示例03 代码缩进 4个空格 正文缩进1.27厘米 20 1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 3 def SetName(self, newname): #定义类的普通方法SetName 4 self.name=newname #将self对应实例对象中的name属性值赋为newname 5 def PrintName(self): #定义类的普通方法PrintName 6 print('姓名:%s'%self.name) #输出self对应实例对象中的name属性值 7 if __name__=='__main__': 8 stu1=Student() #定义Student类对象stu1 9 stu2=Student() #定义Student类对象stu2 10 stu1.SetName('李晓明') #通过stu1对象调用SetName方法 11 stu2.SetName('马红') #通过stu1对象调用SetName方法 12 stu1.PrintName() #通过stu1对象调用PrintName方法 13 stu2.PrintName() #通过stu2对象调用PrintName方法 14 #Student.SetName('未知') #取消前面的注释,则会有系统报错信息 15 #Student.PrintName() #取消前面的注释,则会有系统报错信息 在通过类的实例对象调用类中的普通方法时,并不需要传入self参数的值,self会自动对应调用该方法时所使用的对象。 类中普通方法定义及调用 示例03 代码缩进 4个空格 正文缩进1.27厘米 21 私有属性 PART 04 私有属性 【任务描述】 了解私有属性定义及调用 【关键步骤】 了解私有属性定义及调用 示例04 代码缩进 4个空格 正文缩进1.27厘米 23 1 class Student: #定义Student类 2 name='未知' #定义Student类中有一个name属性 3 __id='未知' #定义Student类中有一个__id私有属性 4 def SetInfo(self,newname,newid): #定义SetInfo函数 5 self.name=newname #将self对应实例对象的name属性赋为newname 6 self.__id=newid #将self对应实例对象的__id属性赋为newid 7 def PrintInfo(self): #定义PrintInfo函数 8 print('姓名:%s,身份证号:%s'%(self.name,self.__id)) 7 if __name__=='__main__': 8 stu=Student() #定义Student类对象stu 9 stu.SetInfo('李晓明','120XXXXXXXXXXXXXXX') #通过stu调用SetInfo方法 10 stu.PrintInfo() #通过stu对象调用PrintInfo方法 11 #print('身份证号:%s'%stu.__id) #取消前面的注释,则程序会报错 私有属性,是指在类内可以直接访问、而在类外无法直接访问的属性。私有属性名是以__(两个下划线)开头。 私有属性 示例04 代码缩进 4个空格 正文缩进1.27厘米 24 构造方法和析构方法 PART 03 构造方法与析构方法 【任务描述】 了解构造方法定义及调用 了解析构方法定义及调用 【关键步骤】 了解构造方法定义及调用 了解析构方法定义及调用 示例05 代码缩进 4个空格 正文缩进1.27厘米 26 1 class Student: #定义Student类 2 def __init__(self): #定义构造方法 3 print('构造方法被调用!') 4 self.name='未知' #将self对应对象的name属性赋值为“未知” 5 def PrintInfo(self): #定义普通方法PrintInfo 6 print('姓名:%s'%self.name) #输出姓名信息 7 if __name__=='__main__': 8 stu=Student() #创建Student类对象stu,自动执行构造方法 9 stu.PrintInfo() #通过stu对象调用PrintInfo方法 构造方法是Python类中的内置方法之一,它的方法名为__init__,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作。 执行程序后,则在屏幕上会输出: 构造方法被调用! 姓名:未知 构造方法与析构方法 示例05 代码缩进 4个空格 正文缩进1.27厘米 27 1 class Student: #定义Student类 2 def __init__(self,name): #定义构造方法 3 print('构造方法被调用!') 4 self.name=name #将self对应对象的name属性赋为形参name的值 5 def PrintInfo(self): #定义普通方法PrintInfo 6 print('姓名:%s'%self.name) #输出姓名信息 7 if __name__=='__main__': 8 stu=Student('李晓明') #创建Student类对象stu,自动执行构造方法 9 stu.PrintInfo() #通过stu对象调用PrintInfo方法 构造方法中,除了self,也可以设置其他参数。 执行程序后,则在屏幕上会输出: 构造方法被调用! 姓名:李晓明 构造方法与析构方法 示例05 代码缩进 4个空格 正文缩进1.27厘米 28 1 class Student: #定义Student类 2 def __init__(self,name='未知'): #定义构造方法 3 print('构造方法被调用!') 4 self.name=name #将self对应对象的name属性赋为形参name的值 5 def PrintInfo(self): #定义普通方法PrintInfo 6 print('姓名:%s'%self.name) #输出姓名信息 7 if __name__=='__main__': 8 stu1=Student() #创建Student类对象stu1,自动执行构造方法 9 stu2=Student('李晓明') #创建Student类对象stu2,自动执行构造方法 10 stu1.PrintInfo() #通过stu1对象调用PrintInfo方法 11 stu2.PrintInfo() #通过stu1对象调用PrintInfo方法 另外,构造方法也可以设置默认参数。 执行程序后,则在屏幕上会输出: 构造方法被调用! 构造方法被调用! 姓名:未知 姓名:李晓明 构造方法与析构方法 示例05 代码缩进 4个空格 正文缩进1.27厘米 29 1 class Student: #定义Student类 2 def __init__(self,name): #定义构造方法 3 self.name=name #将self对应对象的name属性赋值为形参name的值 4 print('姓名为%s的对象被创建!'%self.name) 5 def __del__(self): #定义析构方法 6 print('姓名为%s的对象被销毁!'%self.name) 7 def func(name): 8 stu=Student(name) #创建Student类对象stu 9 if __name__=='__main__': 10 stu1=Student('李晓明') #创建Student类对象stu1 11 stu2=Student('马红') #创建Student类对象stu2 12 del stu2 #使用del删除stu2对象 13 func('张刚') #调用func函数 析构方法是类的另一个内置方法,它的方法名为__del__,在销毁一个类对象时会自动执行,负责完成待销毁对象的资源清理工作,如关闭文件等。 构造方法与析构方法 示例05 代码缩进 4个空格 正文缩进1.27厘米 30 执行程序后,则在屏幕上会输出: 姓名为李晓明的对象被创建! 姓名为马红的对象被创建! 姓名为马红的对象被销毁! 姓名为张刚的对象被创建! 姓名为张刚的对象被销毁! 构造方法与析构方法 示例05 代码缩进 4个空格 正文缩进1.27厘米 31 常用内置方法 PART 06 常用内置方法 【任务描述】 了解__str__定义及调用 了解比较运算的内置方法 【关键步骤】 了解__str__定义及调用 了解比较运算的内置方法 示例06 代码缩进 4个空格 正文缩进1.27厘米 33 1 class Complex: #定义复数类Complex 2 def __init__(self,real,image): #定义构造方法 3 self.real=real #将self对应对象的real属性赋值为形参real的值 4 self.image=image #将self对应对象的image属性赋值为形参image的值 5 def __str__(self): #定义内置方法__str__ 6 return str(self.real)+'+'+str(self.image)+'i' 7 if __name__=='__main__': 8 c=Complex(3.2,5.3) #定义Complex类对象c 9 print(c) #输出c 调用str函数对类对象进行处理时或者调用Python内置函数format()和print()时自动执行,__str__方法的返回值必须是字符串。 执行程序后,则在屏幕上会输出: 3.2+5.3i __str__ 代码缩进 4个空格 正文缩进1.27厘米 34 内置方法 功能描述 __gt__(self, other) 进行self>other运算时自动执行 __lt__(self, other) 进行self<other运算时自动执行 __ge__(self, other) 进行self>=other运算时自动执行 __le__(self, other) 进行self<=other运算时自动执行 __eq__(self, other) 进行self==other运算时自动执行 __ne__(self, other) 进行self!=other运算时自动执行 比较运算的内置方法 代码缩进 4个空格 正文缩进1.27厘米 35 1 class Student: #定义Student类 2 def __init__(self, name, age): #定义构造方法 3 self.name=name #将self对应对象的name属性赋为形参name的值 4 self.age=age #将self对应对象的age属性赋为形参age的值 5 def __gt__(self, other): #定义内置方法__gt__ 6 return self.age>other.age 7 def __ne__(self, other): #定义内置方法__ne__ 8 return self.age!=other.age 9 def __le__(self, other): #定义内置方法__le__ 10 return self.age<=other.age 11 if __name__=='__main__': 12 stu1=Student('李晓明',19) #定义Student类对象stu1 13 stu2=Student('马红',20) #定义Student类对象stu2 14 stu3=Student('张刚',19) #定义Student类对象stu3 15 print('马红的年龄小于等于李晓明的年龄:', stu2<=stu1) 16 print('张刚的年龄小于等于李晓明的年龄:', stu3<=stu1) 17 print('马红的年龄大于李晓明的年龄:', stu2>stu1) 18 print('张刚的年龄大于李晓明的年龄:', stu3>stu1) 19 print('张刚的年龄不等于李晓明的年龄:', stu3!=stu1) 20 print('张刚的年龄不等于马红的年龄:', stu3!=stu2) 比较运算的内置方法 代码缩进 4个空格 正文缩进1.27厘米 36 执行程序后,则在屏幕上会输出如下结果: 马红的年龄小于等于李晓明的年龄: False 张刚的年龄小于等于李晓明的年龄: True 马红的年龄大于李晓明的年龄: True 张刚的年龄大于李晓明的年龄: False 张刚的年龄不等于李晓明的年龄: False 张刚的年龄不等于马红的年龄: True 比较运算的内置方法 37 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。由于Python是动态语言,根据类创建的实例可以任意绑定属性。 打印实例输出属性值 任务背景 任务01 打印实例输出属性值 掌握Python中类的定义方式以及__repr__内置函数的作用 任务需求 任务分析 建立Python项目 定义一个Person类 创建该类的两个实例 打印实例的属性 任务01 借用Pycharm工具,建立Python3项目 定义一个Person类 创建该类的两个实例 打印实例的属性 打印实例输出属性值 任务步骤 任务结果 定义两个实例,并打印他们的属性值name 任务01 谢谢观看 $$

资源预览图

项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
1
项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
2
项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
3
项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
4
项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
5
项目八   类与对象(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。