Python面向对象程序设计

Python面向对象程序设计

本文来自《Linux与Python编程R》实验报告。第四个实验:Python面向对象程序设计。

一、 实验目的和要求

(一) 目的
面向对象程序设计的方法是从日常处理问题思路中形成的一种新的设计方法。通过了解对象、类、封装、继承、方法、构造函数和析构函数等面向对象的程序设计的基本概念,掌握Python类的定义、类的方法、类的继承等,为解决复杂现实问题,培养编程能力及工程应用技能,打下坚实的基础。
(二) 要求
1. 了解面向对象的程序设计思想
2. 掌握Python对象、类、封装、继承、方法、构造函数和析构函数等.
3. 掌握Python的类的继承与组合

二、实验内容及步骤
  1. 设计一个Circle类来表示园,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为1~100的圆,并计算出相应的周长及面积。
  2. 编写程序并测试,有一个汽车类Vehicle,类中的私有数据成员为车轮个数wheels和车重weight;小车类Car是汽车类vehicle派生类,其中包含载客人数passenger_load,默认4人;卡车类Truck是汽车类vehicle派生类,其中包含载客人数passenger_load和载重量payload。
    提示:编写类时要使用get和set方法,Vehicle类定义display()显示车轮和重量,Car和Truck中要对display()进行同名覆盖。
  3. 编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个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

四、小结(运行结果分析)
  1. 在Circle类中,定义构造方法,方便对象实例化,定义了计算周长和面积的函数,引用math.pi,准确计算,最后格式化输出。
  2. 定义了基类Vehicle 基本的成员变量,以及get set 方法,display方法。供子类继承和重载。Car 和Truck 类中,继承Vehicle的构造方法,并且添加了自己独有的成员变量,重写了display方法。
  3. 整体构架与第二题相同,只是在最后print函数 输出的时候,采用了format函数格式化结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值