内容正文:
筐鱼梧领凤峡匪跑脚凡辅乒踪勿久褂舟婴袭剪肚爹伦甄啸镣娟附卉态再骂广东农工商职业技术学院PPT模板-精美原创毕业论文答辩广东农工商职业技术学院PPT模板-精美原创毕业论文答辩
项目8 类与对象
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目介绍
项目背景
面向对象是程序开发领域的重要思想,这种思想模拟了人类认识客观世界的思维方式,将开发中遇到的事物皆看作对象。面向对象开发方法认为客观世界是由对象组成的,对象由属性和操作组成,对象可按其属性进行分类,对象之间的联系通过传递消息来实现,对象具有封装性、继承性和多态性。
项目介绍
项目背景
在Python中,所有的数据(包括数字和字符串)实际上都是对象。我们可以使用type()函数来获取关于对象的类型信息。
>>> n=5
>>>type(n)
<type 'int'>
>>> s="hi"
>>> type(s)
<type 'str'>
>>> t=True
>>>type(t)
<type 'bool'>
项目介绍
项目规划
01
理解面向对象编程思想及其三大特性
02
掌握类和对象的关系、类的属性和方法
03
熟练设计和使用类
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目目标
知识目标
1
理解面向对象的设计思想和类、对象的相关概念
2
掌握类的属性、类的方法、对象的创建与初始化方法、析构方法、可变对象和不可变对象
3
理解运算符的重载
项目目标
能力目标
1
熟练掌握类的设计和使用
2
会使用运算符的重载
3
熟悉使用面向对象思想解决问题的方法
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目准备
1. 类的定义
类(class)是广义的数据类型,能够定义复杂数据的特性,包括静态特性(即数据抽象)和动态特性(即行为抽象,也就是对数据的操作方法)。
一个Python类使用变量存储数据域,称为类中的属性;定义方法来完成动作。对象是类的一个实例,一个类可以创建多个对象。创建类的一个实例的过程被称为实例化。
项目准备
1. 类的定义
(1)类是对象的抽象,而对象是类的具体实例;
(2)类是抽象的,而对象是具体的;
(3)每一个对象都是某一个类的实例;
(4)每一个类在某一时刻都有零或更多的实例;
(5)类是静态的,它们的存在、语义和关系在程序执行前就已经定义好了,对象是动态的,它们在程序执行时可以被创建和删除;
(6)类是生成对象的模板。
类和对象(实例)的关系:
项目准备
1. 类的定义
Python中类定义的语法格式如下:
class <类名>:
类属性1
……
类属性n
<方法定义1>
……
<方法定义n>
项目准备
2. 类的属性
类的属性有两种:类属性和实例属性(对象属性)。
类属性是在类中方法之外定义的,如 have_scale、way_of_reproduction、way_of_sound均属于类属性。类属性的修改可以通过“类名.属性名”访问。
项目准备
3. 类的方法
在Python3中,如果没有为一个新创建的类指明父类,则这个类默认从object类直接继承而来。
实例的构造与初始化涉及两个方法:__new__()和__init__()。
当实例化一个类对象时,最先被调用的是__new__()方法。__new__()方法用于创建对象,而__init__()方法是在对象创建完成之后初始化对象状态。__new__()方法创建完对象后,将该对象传递给__init__()方法中的self参数。
1) 实例的构造与初始化
项目准备
3. 类的方法
__new__()方法是一个静态方法,在object类中已经定义。如果类定义中没有重写该方法,将使用从父类继承而来的__new__()方法。
__init__(), 用于为属性设置初值,在创建对象时自动执行。如上例的Person类,在__init__()方法中初始化了姓名、年龄、体重、身高等信息。如果一个类中没有提供__init__()方法,Python将提供一个默认的__init__()方法。子类如果想调用父类(基类)的__init__()方法,必须显式调用,否则子类的__init__()方法不会自动调用父类的__init__()方法。
1) 实例的构造与初始化
项目准备
3. 类的方法
1) 实例的构造与初始化
类的定义和对象的构造
项目准备
3. 类的方法
Person类中的getName(self)、getAge(self)方法,都是实例方法。类中定义的实例方法都必须以self作为第一个参数,这个参数表示当前是哪一个实例对象要执行类的方法,这个实参由Python隐含地传递给self。例如语句p.getName(),在方法getName中,p被传递给self。
2)类的实例方法
项目准备
3. 类的方法
与类的属性一样,实例方法也有访问权限,可分为3种:私有方法、保护方法和公有方法。
以单下画线开头的方法是 protected 类型的,只允许其本身与子类进行访问,也不能用于 from module import *。
双下画线开头的是私有方法, 只允许这个类本身进行访问。
开头既没有单下画线,也没有双下画线的方法是公有方法,允许任何对象进行访问。公有方法就可以通过对象名调用。其调用形式为:“对象名.公有方法(<实参>)” 。
3)实例方法的访问权限
项目准备
3. 类的方法
Python中类的析构方法是__del__()方法,用来删除对象以释放对象的内存空间。如果用户未提供析构方法,Python将提供一个默认的析构方法。
定义了__del__()方法的类对象无法被Python的循环垃圾收集器收集,所以在自己创建的类中尽量不要自定义__del__()方法。
4)析构方法
项目准备
3. 类的方法
直接访问数据域可能会带来一些问题。如可能直接设置成不合法的值,例如tri. base = 0,将三角形的底复制为0。数据不仅直接被篡改,也会导致类难以维护并且易于出错。
为了避免客户端直接修改属性的问题,我们提供get方法返回值,set方法设置新值。通常get方法被称为获取器或访问器,set方法被称为设置器或修改器。
通过get和set方法,以及私有属性,保证了类中数据的安全。
5)get和set方法
项目准备
4. 运算符的重载
面向对象程序设计过程中,由于对象数据结构的复杂性,使得内置运算符不能完全满足功能需求。例如:一个学生类,包含的数据包括年龄,学号等信息。当比较两个学生对象的大小时,比较运算符就无法获知应该以学生对象的哪些信息(年龄?学号?)为比较基准。因此,Python中可通过运算符重载来实现对象之间的运算。
目录 | CONTENT
1
项目介绍
2
项目目标
3
项目准备
4
项目实施
项目实施
任务8.1 打印实例输出属性值
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表带有很多操作方法,reverse倒序就是其中一个,本次实验通过调用reverse来了解python中的列表。
项目实施
任务8.1 打印实例输出属性值
建立 “打印实例输出属性值.py”文件,用于编写Python实验程序。
编写任务代码。
# 定义一个Person类,并实现其__repr__内置方法,使其返回实例name属性的值,从而实现直接打印实例时输出其name属性的值
class Person:
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
# 编写程序主入口,创建两个Person类的实例,并将两个实例直接打印
if __name__ == '__main__':
person1 = Person('Tom')
person2 = Person('Jerry')
print(person1)
print(person2)
项目实施
任务8.1 打印实例输出属性值
执行程序
①用鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为”打印实例输出属性值”
②在IDE下方控制台查看输出结果
课后练习与技能训练
一、填空题
练习
1.类和对象的关系即数据类型与变量的关系, 规定了可以用于存储什么数据,而 用于实际存储数据,每个对象可存储不同的数据。
2.类中包含属性和方法。 对应一个类可用来保存哪些数据,而 对应一个类可以支持哪些操作(即数据处理)。
3. ,是指在类内可以直接访问、而在类外无法直接访问的属性。
课后练习与技能训练
一、填空题
练习
4.构造方法是Python类中的内置方法之一,它的方法名为 ,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作。
5. 是类的另一个内置方法,它的方法名为__del__,在销毁一个类对象时会自动执行,负责完成待销毁对象的资源清理工作,如关闭文件等。
6.__str__方法的返回值必须是 。
课后练习与技能训练
二、选择题
练习
1.关于类和对象说法正确的是()
根据一个类可以创建多个对象,而每个对象只能是某一个类的对象
根据一个类只能创建一个对象,而每个对象只能是某一个类的对象
根据一个类可以创建多个对象,而每个对象可以属于多个类
根据一个类只能创建一个对象,而每个对象可以属于多个类
课后练习与技能训练
二、选择题
练习
2.下列关于构造方法的说法错误的是()
A.构造方法是Python类中的普通方法之一,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作
B.构造方法中,除了self,也可以设置其他参数
C.构造方法的参数只能是self
D.构造方法也可以设置默认参数
课后练习与技能训练
二、选择题
练习
3.进行self>=other运算时自动执行哪个内置方法()
A.__gt__(self,other)
B.__lt__(self,other)
C.__ge__(self,other)
D.__le__(self,other)
课后练习与技能训练
三、简答题
练习
1.写出下面程序的输出结果。
class Student:
name='Unknown'
age=0
if __name__=='__main__':
print('姓名:',Student.name)
print('年龄:',Student.age)
stu=Student()
print('stu姓名:%s,年龄: %d'%(stu.name,stu.age))
Student.name='张三'
Student.age=18
print('stu姓名:%s,年龄: %d'%(stu.name,stu.age))
stu.name='李四'
stu.age=19
print('stu姓名:%s,年龄: %d'%(stu.name,stu.age))
课后练习与技能训练
三、简答题
练习
2.定义Circle类,要求:包括私有属性__radius,构造函数为半径赋值,构造函数的默认参数值为0,析构函数输出适当信息,普通方法SetRadius用于设置半径,普通方法Area返回圆面积,内置方法__str__用于输出圆面积,内置方法__gt__用于比较两个圆面积大小。并创建两个实例分别验证上述功能。
$$