#实验五 面向对象程序设计
##一、实验学时: 2学时
##二、实验目的
- 掌握:Python类的定义,class关键字,创建对象的方法,访问对象中的成员。
- 掌握:私有成员与公有成员,数据成员与成员方法,类方法与静态方法,属性的定义与使用,混入机制。
- 掌握:继承的作用与Python实现。
- 掌握:构造函数 __ init __ (),析构函数__ del __ (),__ dd __ ()、__ mul __ ()、__ pow __ ()及其他Python类特殊方法与运算符的对应关系。
##三、实验内容
- 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:
- (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。
- (2)获取学生的年龄。get_age(),返回类型:int。
- (3)返回3门科目中最高的分数。get_course(), 返回类型:int。
- 类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100
- 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。
- 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。
- 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。
- 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。
##四、实验结果
- 有下面的类属性:姓名、年龄、成绩列表[语文,数学,英语],其中每门课成绩的类型为整数,类的方法如下所述:
- (1)列表项列表项获取学生的姓名。get_name(),返回类型:str。
- (2)获取学生的年龄。get_age(),返回类型:int。
- (3)返回3门科目中最高的分数。get_course(), 返回类型:int。
- 类定义好之后,可以定义同学测试如下: zm = Student(‘zhangming’,20,[69,88,100]);返回结果: zhangming 20 100
#程序名:1.py
#功 能:定义一个Student类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Student类,并创建一个对象,输出相关成员信息
class Student:
def __init__(self,xingming,nianling,fenshu):#定义类的属性
self.xingming=xingming#姓名
self.fenshu=fenshu#分数
self.nianling=nianling#年龄
def get_name(self):
return self.xingming#获取姓名
def get_age(self):
return self.nianling#获取年龄
def get_course(self):
return max(self.fenshu)#获取分数
zm = Student('zhangming',20,[69,88,100])#实例化对象
print(zm.get_name(),zm.get_age(),zm.get_course())#输出
运行截图:
- 设计一个Circle(圆)类,包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积。请编写程序验证Circle(圆)类的功能。
#程序名:2.py
#功 能:定义一个Circle类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Circle类,并创建一个对象,并输出圆的属性
import math
class Circle:
def __init__(self,yuanxin,banjing,yanse):#定义类的属性
self.yuanxin=yuanxin#圆心
self.banjing=banjing#半径
self.yanse=yanse#颜色
def get_zhouchang(self):
return round(2 * math.pi * self.banjing, 2)#获取圆的周长
def get_mainji(self):
return round(math.pi * self.banjing ** 2, 2)#获取圆的面积
circle = Circle((3, -2), 4, "red")
print("圆的属性有:圆心位置为{},半径为{},颜色为{}".format(circle.yuanxin, circle.banjing, circle.yanse))#输出圆的属性
print("此圆的周长为{},面积{}".format(circle.get_zhouchang(), circle.get_mainji()))#输出面积和周长
运行截图:
- 封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩;求总分,平均分,以及打印输出学生的相关信息。
#程序名:3.py
#功 能:定义一个Student类,并实例化一个对象
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Student类,并创建一个对象,并输出对象的属性
class Student:
def __init__(self,xingming,nianling,xingbie,fenshu):#定义类的属性
self.xingming=xingming#姓名
self.fenshu=fenshu#分数
self.xingbie=xingbie#性别
self.nianling=nianling#年龄
def get_zongfen(self):
return sum(self.fenshu)#获取总分
def get_pingjinfen(self):
return sum(self.fenshu)/len(self.fenshu)#获取平均分
zm = Student('zhangming',20,'男',[69,88,100])
s1 = Student('lisi', 20, 'male', [77, 88, 99])#创建对象
print("姓名:{},年龄:{},性别:{},成绩:英语{} 数学{} 语文{}"
.format(s1.xingming, s1.nianling, s1.xingbie, s1.fenshu[0], s1.fenshu[1], s1.fenshu[2]))#输出对象的属性
print("该学生的总分为{},平均分为{}".format(s1.get_zongfen(), s1.get_pingjinfen()))
运行截图:
- 设计一个Person类,属性有姓名、年龄、性别,创建方法personInfo,打印输出这个人的信息;创建Student类,继承Person类,属性有学院college,班级Group,重写父类PersonInfo方法,调用父类方法打印输出个人信息,将学生的学院、班级信息也打印输出出来。
#程序名:4.py
#功 能:定义一个Person类,实例化一个Person对象,Student类继承Person类,并实例化一个Student类对象,输出对象的相关属性
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Person类,实例化一个Person对象,Student类继承Person类,并实例化一个Student类对象,输出对象的相关属性
class Person:
def __init__(self,xingming,xingbie,nianling):#定义类的属性
self.xingming = xingming#姓名
self.xingbie = xingbie#性别
self.nianling = nianling#年龄
def personInfo(self):
print("姓名:{},年龄:{},性别:{}".format(self.xingming, self.xingbie, self.nianling))#输出Person对象的属性
class Student(Person):#
def __init__(self,xingming,xingbie,nianling,Group,college):
super().__init__(xingming,xingbie,nianling)
self.college=college
self.Group=Group#定义类的属性
def personInfo(self):
print("姓名:{} 年龄:{} 性别:{} 班级:{} 学院:{}".format(self.xingming, self.xingbie, self.nianling, self.Group, self.college))#输出Student对象的属性
s1 = Person('李四', 20, 'male')
s1.personInfo()
s2 = Student('张三', 20, 'male', '22-10', '软件学院')
s2.personInfo()
运行截图:
- 定义一个交通工具(Vehicle)的类,属性:速度(speed)、体积(size)等等。方法:移动move()、设置速度setSpeed(int speed)、加速speedUp()、减速speedDown()等等。实例化一个交通工具对象,通过方法初始化speed、size的值并且在相关方法中可以打印输出出来;另外调用加速减速的方法对速度进行改变。
#程序名: 5.py
#功 能:定义一个Vehicle类,定义加速,减速,启动,停车,设置车速,打印对象信息的相关函数,实例化对象,输出相关结果
#作 者:************
#学 号:************
#日 期:2022.05.01
#思 路:定义一个Vehicle类,定义加速,减速,启动,停车,设置车速,打印对象信息的相关函数,实例化对象,输出相关结果
class Vehicle:
def __init__(self,speed,size):#定义类的属性
self.speed=speed#车速
self.size=size#车的大小
def printInfo(self):
print("这辆车的车速为{},体积为{}".format(self.speed,self.size))#输出对象属性
def setSpeed(self,speed):
self.speed=speed#设置车速
def move(self):
print("点火中")
self.setSpeed(10)
print("小车开始移动,车速为{}".format(self.speed))#车移动
def stop(self):
self.setSpeed(0)
print("小车停止移动")#车停止
def speedUp(self, num):#加速
if self.speed + num >= 120:
self.setSpeed(120)
print("速度已达最大限度,当前车速为120")
else:
self.setSpeed(self.speed + num)
print("小车已加速,当前车速为{}".format(self.speed))
def speedDown(self, num):#减速
if self.speed - num < 0:
self.stop()
else:
self.setSpeed(self.speed - num)
print("小车已减速,当前车速为{}".format(self.speed))
car = Vehicle(0, 8)
car.printInfo()
car.move()
car.setSpeed(50)
car.speedUp(20)
car.speedUp(60)
car.speedDown(20)
car.stop()
运行截图:
##五、实验小结
###问题与解决办法:
- 问题:编译出错,提示:引用π的值。
解决办法:导入math模块。
- 问题:不知道如何定义构造函数。
解决办法:在类中对_init_函数进行重载。
- 问题:不知道如何通过定义继承类。
解决办法:查找资料后得知,定义类时在圆括号里填入父类。
- 问题:不知道self参数的用法。
解决办法:self参数代表对象本身,类的所有实例方法都必须至少有一个名为self的参数。
###心得体会:
-
多翻阅Python书籍有利于对语法的进一步掌握。
-
我们应当养成自主学习的习惯,提高自己搜索信息的能力,利用好网络带给我们的便利。
-
有自己难以解决的问题,要积极向老师同学请教。
-
在学习过程中,及时记录自己遇到问题和解决方法,以便日后查看回顾。
-
Python学习需要不仅需要扎实的语法基础,还需要充足的实践。