Python面向对象程序设计
本文来自《Linux与Python编程R》实验报告。第四个实验:Python面向对象程序设计。
目录
- Python面向对象程序设计
- 一、 实验目的和要求
- 二、实验内容及步骤
- 三、实验代码清单
- 1. 设计一个Circle类来表示园,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为1~100的圆,并计算出相应的周长及面积。
- 2. 编写程序并测试,有一个汽车类Vehicle,类中的私有数据成员为车轮个数wheels和车重weight;小车类Car是汽车类vehicle派生类,其中包含载客人数passenger_load,默认4人;卡车类Truck是汽车类vehicle派生类,其中包含载客人数passenger_load和载重量payload。
- 3. 编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个person类,作为学生数据操作类student和教师数据操作类teacher的基类。
- 四、小结(运行结果分析)
一、 实验目的和要求
(一) 目的
面向对象程序设计的方法是从日常处理问题思路中形成的一种新的设计方法。通过了解对象、类、封装、继承、方法、构造函数和析构函数等面向对象的程序设计的基本概念,掌握Python类的定义、类的方法、类的继承等,为解决复杂现实问题,培养编程能力及工程应用技能,打下坚实的基础。
(二) 要求
1. 了解面向对象的程序设计思想
2. 掌握Python对象、类、封装、继承、方法、构造函数和析构函数等.
3. 掌握Python的类的继承与组合
二、实验内容及步骤
- 设计一个Circle类来表示园,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为1~100的圆,并计算出相应的周长及面积。
- 编写程序并测试,有一个汽车类Vehicle,类中的私有数据成员为车轮个数wheels和车重weight;小车类Car是汽车类vehicle派生类,其中包含载客人数passenger_load,默认4人;卡车类Truck是汽车类vehicle派生类,其中包含载客人数passenger_load和载重量payload。
提示:编写类时要使用get和set方法,Vehicle类定义display()显示车轮和重量,Car和Truck中要对display()进行同名覆盖。 - 编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个person类,作为学生数据操作类student和教师数据操作类teacher的基类。
三、实验代码清单
1. 设计一个Circle类来表示园,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为1~100的圆,并计算出相应的周长及面积。
import math
class Circle:
def __init__(self, r):
self.r = r
def area(self):
return self.r ** 2 * math.pi
def crea(self):
return self.r * 2 * math.pi
if __name__ == "__main__":
circle = Circle(8)
print("圆的半径为:%.2f" % circle.r)
print("圆的面积为:%.2f" % circle.area())
结果:
F:\pythonProject\venv\Scripts\python.exe F:/pythonProject/main.py
圆的半径为:8.00
圆的面积为:201.06
进程已结束,退出代码为 0
2. 编写程序并测试,有一个汽车类Vehicle,类中的私有数据成员为车轮个数wheels和车重weight;小车类Car是汽车类vehicle派生类,其中包含载客人数passenger_load,默认4人;卡车类Truck是汽车类vehicle派生类,其中包含载客人数passenger_load和载重量payload。
class Vehicle:
def __init__(self, wheels, weight):
self._wheels = wheels
self._weight = weight
def display(self):
print("车轮的个数为:" + str(self._wheels))
print("重量为:" + str(self._weight))
def getwheels(self):
return self._wheels
def getweight(self):
return self._weight
def setwheels(self, wheels):
self._wheels = wheels
def setweight(self, weight):
self._weight = weight
class Car(Vehicle):
def __init__(self, wheels, weight):
Vehicle.__init__(self, wheels, weight)
self._passenger_load = 4
def display(self):
print("——————轿车信息——————")
print("车轮的个数为:" + str(self._wheels))
print("重量为:" + str(self._weight))
print("载客人数为:" + str(self._passenger_load))
def setpassenger(self):
self._passenger_load = 4
def getpassenger(self):
return self._passenger_load
class Truck(Vehicle):
def __init__(self, wheels, weight, passenger_load, payload):
Vehicle.__init__(self, wheels, weight)
self._passenger_load = passenger_load
self._payload = payload
def display(self):
print("——————卡车信息——————")
print("车轮的个数为:" + str(self._wheels))
print("重量为:" + str(self._weight))
print("载客人数为:" + str(self._passenger_load))
print("载重量为:" + str(self._payload))
def set_passenger_load(self, passenger_load):
self._passenger_load = passenger_load
def set_payload(self, payload):
self._payload = payload
def get_passenger_load(self):
return self._passenger_load
def get_payload(self):
return self._payload
if __name__ == "__main__":
car = Car(4, '6t')
car.display()
car.setweight('8t')
print("轿车的新重量为:" + str(car.getweight()))
truck = Truck(22, '67t', 3, '108t')
truck.display()
结果:
F:\pythonProject\venv\Scripts\python.exe F:/pythonProject/main.py
——————轿车信息——————
车轮的个数为:4
重量为:6t
载客人数为:4
轿车的新重量为:8t
——————卡车信息——————
车轮的个数为:22
重量为:67t
载客人数为:3
载重量为:108t
进程已结束,退出代码为 0
3. 编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个person类,作为学生数据操作类student和教师数据操作类teacher的基类。
class Person:
def __init__(self, number, name):
self._number = number
self._name = name
def setnumber(self, number):
self._number = number
def setname(self, name):
self._name = name
def getnumber(self):
return self._number
def getname(self):
return self._name
def display(self):
print("编号:" + str(self._number), end=",")
print("姓名:" + str(self._name))
class Student(Person):
def __init__(self, number, name, classnum, grade):
Person.__init__(self, number, name)
self._classnum = classnum
self._grade = grade
def setclassnum(self, classnum):
self._classnum = classnum
def setgrade(self, grade):
self._grade = grade
def getclassnum(self):
return self._classnum
def getgrade(self):
return self._grade
def display(self):
print("编号:" + str(self._number), end=",")
print("姓名:" + str(self._name), end=",")
print("班级:" + str(self._classnum), end=",")
print("成绩:" + str(self._grade))
class Teacher(Person):
def __init__(self, number, name, head, department):
Person.__init__(self, number, name)
self._head = head
self._department = department
def sethead(self, head):
self._head = head
def setdepartment(self, department):
self._department = department
def gethead(self):
return self._head
def getdepartment(self):
return self._department
def display(self):
print('编号:' + str(self._number), end=',')
print('姓名:' + str(self._name), end=',')
print('职称' + str(self._head), end=',')
print('部门:' + str(self._department))
if __name__ == "__main__":
student = Student(1, "小帅", '2班', "100分")
student.display()
student.setclassnum('1班')
print("{} 修改后的班级是:{}".format(student.getname(), student.getclassnum()))
teacher = Teacher(2, '李四', '高级教师', '党政办')
teacher.display()
结果:
F:\pythonProject\venv\Scripts\python.exe F:/pythonProject/main.py
编号:1,姓名:小帅,班级:2班,成绩:100分
小帅 修改后的班级是:1班
编号:2,姓名:李四,职称高级教师,部门:党政办
进程已结束,退出代码为 0
四、小结(运行结果分析)
- 在Circle类中,定义构造方法,方便对象实例化,定义了计算周长和面积的函数,引用math.pi,准确计算,最后格式化输出。
- 定义了基类Vehicle 基本的成员变量,以及get set 方法,display方法。供子类继承和重载。Car 和Truck 类中,继承Vehicle的构造方法,并且添加了自己独有的成员变量,重写了display方法。
- 整体构架与第二题相同,只是在最后print函数 输出的时候,采用了format函数格式化结果。