人工智能及Python应用 课件 第9章 面向对象编程-学生就业管理_第1页
已阅读1页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

人工智能及Python应用第9章面向对象编程—学生就业管理

1任务导入2职业能力目标3知能达标4

素养提升5视野拓展6任务评价目录1任务导入返回主目录

每年毕业季时,同学们既憧憬又迷茫,为了帮助大家更好地规划职业方向,顺利找到满意的工作。学校计划开发一款学生就业管理系统,这个系统将帮助学生记录和跟踪自己的求职进展,帮助学校就业管理人员完成学生就业信息的快速录入、就业岗位的精准匹配、企业招聘信息的及时发布等。请大家一起来完成这项任务吧。2职业能力目标返回主目录职业技能类别职业能力要求人工智能工程师(HCIA-AI)v理解面向对象的编程思想v掌握类和对象的基本操作人工智能训练师(四级)v熟悉使用Python语言进行面向对象编程“Python程序开发”技能竞赛v学会使用面向对象编程解决实际问题3知能达标返回主目录什么是面向对象?面向对象是程序开发领域的重要思想,这种思想模拟了人类认识客观世界的思维方式,将开发中遇到的事物皆看作对象,在主流编程语言中都有面向对象编程思想,例如Java、Python等。Python语言中的面向对象编程(Object-OrientedProgramming,OOP)是一种解决软件复用的设计和编程方法,使得代码更加直观、灵活和可重用。分析解决问题的步骤使用函数实现每个步骤的功能按步骤依次调用函数分析问题,从中提炼出多个对象将不同对象各自的特征和行为进行封装通过控制对象的行为来解决问题面向过程面向对象主要知识点【知能基础】类与对象面向对象编程有两个非常重要的概念:类(Class)和对象(Object)。“人以类聚,物以群分”,具有相同或相似特征和行为的事物的集合统称为类,类是抽象的,不具体指代一个实体。在实际使用的时候通常会找到这个类的一个具体的存在,这个具体的存在就是对象,对象在现实世界中是看得见摸得着的,万物皆对象,例如一本书、一辆车、一名学生......这些都是对象。对象是根据类创建的,一个类可以对应多个对象,类是对象的抽象,对象是类的实例,类就是创建对象的模板,如图所示,“学生”是一个类,具有相似的特征和行为,张明、王丽、李梅、赵云都是具体的对象。类与对象的关系在Python编程时,使用类的顺序是:先定义(创建)类,然后再创建类的对象(实例),通过对象实现特定的功能。类是由3部分组成:(1)类的名称:大驼峰命名法,首字母一般大写,例如Student(学生类)。(2)类的属性:用于描述事物的特征,例如学号。(3)类的方法:用于描述事物的行为,例如学习。特别注意,在类中定义的是方法虽然跟前面学习的函数基本一致,但是不能称其为“函数”。【知能基础】定义类定义一个类使用class关键字实现,语法格式为:格式【知能基础】定义类class类名:属性名=属性值

def方法名(self):

方法体定义一个学生类,示例代码如下:示例代码【知能基础】定义类classStudent:

#类属性

student_id='202420241156'#属性:学号

name='张明'#属性:姓名

#类方法

defstudy(self):

#方法:学习

print("正在学习")

defplay_sports(self):

#方法:运动

print("正在运动")【知能基础】定义类

如何把日常生活中的事物抽象成程序中的类?

一般名词都是类(称为名词提炼法),例如张明在图书馆看书,其中“张明”可以抽象为Student类,“图书馆”可以抽象为Library类,“书”可以抽象为Book类。【思考】Student、Library、Book这些类的属性和方法有哪些?请大家按照定义类的示例格式写出来吧。

张明

图书馆

书Student类Library类Book类

前面定义了一个Student类,就好比有学生的一个模板了,那么接下来就可以根据已经定义的类去创建出一个个具体的“学生”对象了。例如张明、李梅等、

根据类创建对象的语法格式为:

对象名=类名()

使用对象的本质是访问对象成员,语法格式为:

对象名.属性名

对象名.方法名()格式【知能基础】创建对象格式定义一个学生类并创建对象,示例代码如下:【知能基础】创建对象classStudent:

#类属性

student_id='202420241156'#属性:学号

name='张明'#属性:姓名

#类方法

defstudy(self):

#方法:学习

print("正在学习")

defplay_sports(self):

#方法:运动

print("正在运动")#创建一个对象,并用变量stu1来保存它的引用stu1=Student()stu1.student_id='202420241157'='李梅'stu1.study()stu1.play_sports()print(stu1.student_id)print()示例代码

在类的定义中,类的成员分为公有成员和私有成员,均包括属性和方法,它们规定了类的特征和行为。【知能基础】类的成员

属性按声明的方式可以分为两类:类属性和实例属性。

类属性是声明在类内部、方法外部的属性。可以通过类或对象进行访问,但只能通过类进行修改。【知能基础】类的成员-属性示例代码#定义学生类classStudent:

#类属性

student_id='202420241156'

#属性:学号

name='张明'

#属性:姓名

#类方法

defstudy(self):

#方法:学习

print("正在学习")

defplay_sports(self):

#方法:运动

print("正在运动")#创建一个对象,并用变量stu2来保存它的引用stu2=Student()print(S)

#通过类Student访问类属性print()

#通过对象stu2访问类属性S='赵云'

#通过类Student修改类属性nameprint(S)print()='王丽'

#通过对象stu2修改类属性nameprint(S)print()【思考】在以上示例中,stu2对象不能修改类属性的值,但是最后一句代码“print(stu2.name)”为什么对象访问的属性值为”王丽”?

实例属性是在方法内部声明的属性,Python支持动态添加实例属性,只能通过对象访问和修改实例属性。请通过以下3个示例对比验证,进一步理解实例属性的操作方法。

(1)动态添加实例属性,示例代码如下:【知能基础】类的成员示例代码#动态添加实例属性classStudent:defstudy(self):

self.name='李昊'

#添加实例属性stu3=Student()

#创建对象stu3stu3.study()S='李广'

#修改实例属性print()

#通过对象stu3访问实例属性stu3.course="计算机"#动态地添加实例属性print(stu3.course)

(2)访问实例属性,示例代码如下:【知能基础】类的成员示例代码#访问实例属性classStudent:

defstudy(self):

self.name='李昊'

#添加实例属性stu4=Student()

#创建对象stu4stu4.study()print()

#通过对象stu4访问实例属性print(S)

#通过类Student访问实例属性,报错

(3)修改实例属性,示例代码如下:【知能基础】类的成员示例代码#修改实例属性classStudent:

defstudy(self):

self.name='李昊'

#添加实例属性stu5=Student()

#创建对象stu5stu5.study()S='王欢'

#修改实例属性print()

#通过对象stu5访问实例属性

方法按定义方式和用途可以分为三类:实例方法、类方法和静态方法。

(1)实例方法形似函数,但它定义在类内部。以self为第一个形参,self参数代表对象本身,只能通过对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#方法classStudent:

defstudy(self):

#实例方法

print("我是实例方法")stu6=Student()stu6.study()

#通过对象调用实例方法Student.study()

#通过类调用实例方法,报错

(2)类方法是定义在类内部,使用装饰器@classmethod修饰的方法,第一个参数为cls,代表类本身,可以通过类和对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#类方法classStudent:

@classmethod

defexam(cls):

#类方法

print("我是类方法")stu7=Student()stu7.exam()

#通过对象调用类方法Student.exam()

#通过类调用类方法补充说明:类方法中可以使用cls访问和修改类属性的值,示例代码如下:【知能进阶】类的成员-方法示例代码classStudent:

name='李力'

#类属性

@classmethod

defexam(cls):

#类方法

print(cls.name)

#使用cls访问类属性

cls.name='鲁西'#使用cls修改类属性

print(cls.name)stu8=Student()stu8.exam()

(3)静态方法是定义在类内部,使用装饰器@staticmethod修饰的方法,没有任何默认参数,静态方法可以通过类和对象调用,示例代码如下:【知能基础】类的成员-方法示例代码#静态方法classStudent:

@staticmethod

deftest():

#静态方法

print("我是静态方法")stu9=Student()stu9.test()

#通过对象调用静态方法Student.test()

#通过类调用静态方法

补充说明:静态方法内部不能直接访问属性或方法,但可以使用类名访问类属性或调用类方法,示例代码如下:【知能进阶】类的成员-方法示例代码classStudent:

name='李力'

#类属性

@staticmethod

deftest():

print("我是静态方法")

print(f"类属性的值为{S}")

#静态方法中访问类属性

前面讲的类的成员默认是公有成员,可以在类的外部通过类或对象随意地访问,这样显然不够安全。为了保证类中数据的安全,Python支持将公有成员改为私有成员,在一定程度上限制在类的外部对类成员的访问。Python通过在类成员的名称前面添加双下划线(__)的方式来表示私有成员,语法格式为:

__属性名

__方法名【知能进阶】类的成员-私有成员格式

示例代码如下:【知能进阶】类的成员-私有成员示例代码#私有属性classStudent:

__name='李力'

#私有属性

def__study(self):

#私有方法

print("学习")

私有成员在类的内部可以直接访问,在类的外部不能直接访问,但可以通过调用类的公有成员方法的方式进行访问,示例代码如下:【知能进阶】类的成员-私有成员示例代码classStudent:

__name='李力'

#私有属性

def__study(self):

#私有方法

print("学习")

deftest(self):

print(f"学生{self.__name}在打篮球")

#公有方法中访问私有属性

self.__study()

#公有方法中调用私有方法

类中还包括两个特殊的方法:构造方法和析构方法,这两个方法都是系统内置方法。

构造方法指的是__init__()方法。创建对象时系统自动调用,从而实现对象的初始化。每个类默认都有一个__init__()方法,可以在类中显式定义__init__()方法。__init__()方法可以分为无参构造方法和有参构造方法。

(1)当使用无参构造方法创建对象时,所有对象的属性都有相同的初始值,无参构造方法示例代码如下:

【知能进阶】类的成员-私有方法示例代码#无参构造方法classStudent:

def__init__(self):

#无参构造方法

self.course="人工智能"

defstudy(self):

print(f"正在学习:{self.course}")stu1=Student()

#创建对象并初始化stu1.study()stu2=Student()

#创建对象并初始化stu2.study()

(2)当使用有参构造方法创建对象时,对象的属性可以有不同的初始值,有参构造方法示例代码如下:【知能进阶】类的成员-私有成员示例代码#有参构造方法classStudent:

def__init__(self,course):

#有参构造方法

self.course=course

#将形参赋值给属性

defstudy(self):

print(f"正在学习:{self.course}")

stu1=Student("计算机")

#创建对象,并根据实参初始化属性stu1.study()stu2=Student("人工智能")

#创建对象,并根据实参初始化属性stu2.study()

(3)析构方法即__del__()方法,是销毁对象时系统自动调用的方法。每个类默认都有一个__del__()方法,可以显式定义析构方法,示例代码如下:【知能进阶】类的成员-私有成员示例代码#析构方法classStudent:

def__init__(self):

self.course="英语"print("对象被创建")

def__del__(self):

print("对象被销毁")stu=Student()print(stu.course)delstuprint(stu.course)

#报错【知能基础】面向对象的三大特性

源于软件工程的核心需求(降低‌管理复杂度、提升复用性、增强扩展性),‌面向对象主要有三大特性,分别为封装、继承和多态。

智能家居系统中的典型应用场景封装‌:灯光亮度调节算法和温度传感器数据被隐藏在墙内控制盒中,用户只需语音指令下达命令。继承‌:所有智能设备都共享「连接协议」,新风系统子类扩展「空气净化」方法,智能窗帘子类新增「光照感应」属性。‌多态‌:执行"打开"指令时,门锁调用解锁协议,空调启动制冷程序,智能音箱播放欢迎语,同一指令触发不同硬件设备响应。【知能基础】面向对象的三大特性-封装

封装是面向对象的重要特性之一,它的基本思想是对外隐藏类的细节,提供用于访问类成员的公开接口。类的外部无需知道类的实现细节,只需要使用公开接口便可访问类的内容,在一定程度上保证了类内部数据的安全。

为了契合封装思想,在定义类时需要满足以下两点要求。

(1)将类属性声明为私有属性。

(2)添加两类供外界调用的公有方法,分别用于设置或获取私有属性的值。

示例代码如下:【知能基础】面向对象的三大特性-封装示例代码#封装classStudent:

def__init__(self,name):

self.name=name

#姓名,公共属性

self.__age=18

#年龄,私有属性,默认为18岁

#设置私有属性值的方法

defset_age(self,new_age):

if0<new_age<=120:

#判断年龄是否合法

self.__age=new_age

#获取私有属性值的方法

defget_age(self):

returnself.__agestu=Student("张明")stu.set_age(20)print(f"年龄为{stu.get_age()}岁")

继承是面向对象的重要特性之一,它主要用于描述类与类之间的关系,在不改变原有类的基础上扩展原有类的功能。若类与类之间具有继承关系,被继承的类称为父类或基类,继承其他类的类称为子类或派生类,子类会自动拥有父类的公有成员。

在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,布偶猫和波斯猫都继承自猫,而拉布拉多导盲犬和德牧警犬都继承自狗。【知能基础】面向对象的三大特性-继承动物猫布偶猫波斯猫狗拉布拉多导盲犬德牧警犬

根据继承的方式,继承分为单继承和多继承。

单继承即子类只继承一个父类。例如,布偶猫、波斯猫都属于猫类,它们之间存在的继承关系即为单继承。【知能基础】面向对象的三大特性-继承猫布偶猫波斯猫Python中单继承的语法格式如下:class子类名(父类名):

子类继承父类的同时会自动拥有父类的公有成员。自定义类默认继承基类object。【知能基础】面向对象的三大特性-继承示例代码格式【提示】子类不会拥有父类的私有成员,也不能访问父类的私有成员。在上述示例代码中,如添加以下代码将报错:print(persianCat.__age) #子类访问父类的私有属性persianCat.__test() #子类调用父类的私有方法

#继承classCat(object):

def__init__(self,color):

self.color=color

self.__age=1

defwalk(self):

print("走猫步~")

def__test(self):

print("测试")#定义继承Cat的Persian类classPersian(Cat):

passpersianCat=Persian("白色")

#创建子类的对象print(f"{persianCat.color}的波斯猫")

#子类访问从父类继承的属性persianCat.walk()

#子类调用从父类继承的方法

多继承是指程序中的一个类也可以继承多个类,如此子类具有多个父类,也自动拥有所有父类的公有成员。

现实生活中,房屋具有居住功能,汽车具有驾驶功能,房车继承了房屋和汽车的功能,房车和房屋、汽车之间存在的多继承的关系。【知能进阶】面向对象的三大特性-继承房屋汽车房车居住驾驶居住驾驶Python中多继承的语法格式为:【知能进阶】面向对象的三大特性-继承示例代码格式class子类名(父类名1,父类名2,...):#多继承#定义一个表示房屋的类classHouse(object):

deflive(self):

#居住

print("供人居住")#定义一个表示汽车的类classCar(object):

defdrive(self):

#行驶

print("行驶")#定义一个表示房车的类classTouringCar(House,Car):

passtour_car=TouringCar()tour_car.live()

#子类对象调用父类House的方法tour_car.drive()

#子类对象调用父类Car的方法

如果House类和Car类中有一个同名的方法,那么子类会调用哪个父类的同名方法呢?

如果子类继承的多个父类是平行关系的类,那么子类先继承哪个类,便会先调用哪个类的方法。

子类会原封不动地继承父类的方法,但子类有时需要按照自己的需求对继承来的方法进行调整,也就是在子类中重写从父类继承来的方法。在子类中定义与父类方法同名的方法,在方法中按照子类需求重新编写功能代码即可,示例代码如下:【知能进阶】面向对象的三大特性-继承示例代码#定义一个表示人的类classPerson(object):

defsay_hello(self):

print("Hello!")#定义一个表示中国人的类classChinese(Person):

defsay_hello(self):

#重写的方法

print("您好!")chinese=Chinese()chinese.say_hello()

#子类调用重写的方法

子类重写了父类的方法之后,无法直接访问父类的同名方法,但可以使用super()函数间接调用父类中被重写的方法,示例代码如下:【知能进阶】面向对象的三大特性-继承示例代码#定义一个表示中国人的子类classChinese(Person):

defsay_hello(self):

super().say_hello()

#调用父类被重写的方法

print("您好!")

多态是面向对象的重要特性之一,它的直接表现即让不同类的同一功能可以通过同一个接口调用,表现出不同的行为。【知能进阶】面向对象的三大特性-多态示例代码#支付classPayment:

defpay(self,amount):

raiseNotImplementedError("Subclassesshouldimplementthis!")#信用卡支付classCreditCardPayment(Payment):

defpay(self,amount):

print(f"Paid{amount}

usingCreditCard")#支付宝支付classAlipayPayment(Payment):

defpay(self,amount):

print(f"Paid{amount}

usingAlipay")#微信支付classWeChatPayment(Payment):

defpay(self,amount):

print(f"Paid{amount}

usingWeChatPay")defmake_payment(payment_method,amount):

payment_method.pay(amount)#使用多种方式进行支付credit_card=CreditCardPayment()alipay=AlipayPayment()wechat=WeChatPayment()make_payment(credit_card,100)

#输出:Paid100usingCreditCardmake_payment(alipay,200)

#输出:Paid200usingAlipaymake_payment(wechat,300)

#输出:Paid300usingWeChatPay①②4素养提升返回主目录

大学生就业管理系统以促进学生就业为核心,为师生提供就业相关服务。本任务要求编写代码,实现一个基于面向对象的大学生就业管理系统,具有公司信息显示、职位信息显示、学生名单显示、就业统计、已就业名单显示、未就业名单显示和退出等功能。【任务实践】学生就业管理任务描述初始页登录页主页【任务实践】学生就业管理具体需求:1.定义类(1)Student(学生):存储学生基本信息(2)Job(职位):存储职位信息(3)Company(公司):存储公司信息(4)Login(登录):用户登录管理(5)EmploymentManager(就业管理):负责管理学生就业信息,包括学生、职位和公司之间的关系2.实现首页、登录页和主页功能(1)按照要求展示首页(2)按照要求提示输入账号和密码,控制密码输入次数为3次。如果用户名或密码输入错误,则提示“账号或密码错误,还剩下*次机会”;如果错误输入超过3次,则提示“账号或密码错误次数过多,登录失败!”;如果用户名或密码输入正确,则提示“登录成功,请选择对应的操作”,按要求显示主页。(3)按照主页要求分别实现公司信息显示、职位信息显示、学生名单显示、就业统计、已就业名单显示、未就业名单显示和退出功能。【任务实践】学生就业管理输入1,显示所有公司信息,效果为:主页功能(一)输入2,显示所有职业信息,效果为:输入3,显示所有学生信息,效果为:输入4,显示就业统计结果,效果为:输入5,显示已就业名单,效果为:【任务实践】学生就业管理输入6,显示未就业名单,效果为:主页功能(二)输入q或者Q,退出系统,效果为:【任务实践】学生就业管理(1)创建项目名为“employment”,在该项目中新建Python文件“student.py”,在文件中定义Student(学生)类,存储学生基本信息。classStudent:def__init__(self,name,student_id,gender,grade,major):=nameself.student_id=student_idself.gender=genderself.grade=gradeself.major=majorself.employed=Falseself.job=Nonepany_name=Noneself.job_title=Nonedefapply_for_job(self,job):self.job_title=job.titlepany_name=self.employed=Truedef__str__(self):returnf"姓名:{},学号:{self.student_id},性别:{self.gender},年级:{self.grade},专业:{self.major}"

【任务实践】学生就业管理任务实施(2)在项目中新建Python文件“company.py”,在文件中定义Company(公司)类,存储公司信息。classCompany:def__init__(self,name,industry):=nameself.industry=industrydef__str__(self):returnf"公司:{},

温馨提示

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

最新文档

评论

0/150

提交评论