Python 面向对象程序设计类的使用、继承等

这个实验主要通过了解对象、类、封装、继承、方法、构造函数和析构函数等面向对象的程序设计的基本概念,掌握 Python 类的定义、类的方法、类的继承等。
在做实验时要注意__init__(应该是4个下划线,前后各两个),也要注意自己的属性条件,并且也可以适当的修改格式使得输出美观

实验1:设计一个 Circle 类来表示圆,这个类包含圆的半径以及求周长和面积的函数。再使用这个类创建半径为 1~100 的圆,并计算出相应的周长及面积。
实验代码:

class Circle:
    def __init__(self,r): #定义_init_方法,将r属性绑上去
        self.setR(r)
    def setR(self,r):
        if r < 1 or r > 100:
            raise Exception('r must be 1>r<100 ') #触发异常
        self._r = r
    def getR(self):
        return self._r
    def getArea(self):
        return 3.14 * self._r**2  
    def getPerimeter(self):
        return 3.14 * 2 * self._r
    def show(self):
        print(self.getR(), '    ', self.getArea(), '    ', '%.2f' %self.getPerimeter()) 
         #进行半径、面积、周长的显示并且设置了周长的输出格式
if __name__ == '__main__':
    print("半径    面积      周长")  #可以使输出格式更加的美观
    c = Circle(5)
    c.show()

实验结果:
在这里插入图片描述
2、编写程序并测试,有一个汽车类 Vehicle,类中的私有数据成员为车轮个数wheels 和车重 weight;小车类 Car 是汽车类 vehicle 派生类,其中包含载客人数passenger_load,默认 4 人;卡车类 Truck 是汽车类 vehicle 派生类,其中包含载客人数 passenger_load 和载重量 payload。
实验代码:

class Vehicle(object):
    def __init__(self, wheels, weight):  #初始绑定
        self.setWheels(wheels)
        self.setWeight(weight)
    def setWheels(self, wheels):
        if type(wheels) != int:  #判断wheels类型是否为整型
            raise Exception('wheels must be int') #输出错误
        self._wheels = wheels  #将wheels属性绑定
    def setWeight(self, weight):
        if type(weight) != int:
            raise Exception('weight must be int')
        self._weight = weight
    def getWeight(self):  #get方法返回车重
        return self._weight
    def getWheels(self):  #返回车轮个数
        return self._wheels
    def display(self):  #结果的显示
        print(self.getWheels(),'        ',self.getWeight())  #显示车轮个数和车重

class Car(Vehicle):
    def __init__(self, wheels, weight, passenger_load = 4):
        super(Car, self).__init__(wheels, weight)
        Vehicle.__init__(self, wheels, weight)
        self.setPassenger(passenger_load)
    def setPassenger(self, passenger_load):
        if type(passenger_load) != int:
            raise Exception('passenger_load must be int')
        self._passenger_load = passenger_load
    def getPassenger(self):
        return self._passenger_load
    def display(self):
        super(Car, self).display()  #调用Vehicle的display()显示车轮个数和车重
        print('汽车可载乘客个数%d' %self.getPassenger())  #显示乘客个数

class Truck(Vehicle):
    def __init__(self, wheels, weight, passenger_load, payload):
        super(Truck, self).__init__(wheels, weight)
        Vehicle.__init__(self, wheels, weight)
        self.setPassenger(passenger_load)
        self.setPayload(payload)
    def setPassenger(self, passenger_load):
        if type(passenger_load) != int:
            raise Exception('passenger_load must be int')
        self._passenger_load = passenger_load
    def setPayload(self, payload):
        if type(payload) != int:
            raise Exception('payload must be int')
        self._payload = payload
    def getPayload(self):
        return self._payload
    def getPassenger(self):
        return self._passenger_load
    def display(self):
       #调用Vehicle的display()显示车轮个数和车重
        super(Truck, self).display() 
        print('卡车载客个数:%d' %self.getPassenger())  #显示乘客个数
        print('卡车载重重量:%d' %self.getPayload())  #显示载重重量

 if __name__ == '__main__':
    print("车轮个数    车重    ")
    # vehicle=Vehicle(0,100)  可以显示也可以不用显示
    # vehicle.display()
    car=Car(4,200)
    car.display()
    truck=Truck(8,500,4,5000)
    truck.display()

实验结果:
在这里插入图片描述

3、编写一个学生和教师数据输入和输出的程序。学生数据包括编号、姓名、班号、和成绩;教师的数据含有编号、姓名、职称和部门。要求设计一个 person 类,作为学生数据操作类 student 和教师数据操作类 teacher 的基类。

```python
class Person(object):
    def __init__(self, number, name):
        self.setNumber(number)
        self.setName(name)
    def setNumber(self, number):
        if type(number) != int:
            raise Exception('number must be int')
        self._number = number
    def setName(self, name):
        #if not isinstance(name,str):
        if type(name) != str:
            raise Exception('name must be string')
        self._name = name
    def getName(self):
        return self._name
    def getNumber(self):
        return self._number
    def display(self):
        print(self.getNumber(), self.getName(), end = " ")

class Student(Person):
    def __init__(self, number, name, classNumber, grade):
        super(Student, self).__init__(number, name)
        Person.__init__(self, number, name)
        self.setClassNumber(classNumber)
        self.setGrade(grade)
    def setClassNumber(self, classNumber):
        if type(classNumber) != int:
            raise Exception('classNumber must be int')
        self._classNumber = classNumber
    def setGrade(self, grade):
        if type(grade) != int or grade > 100 or grade < 0:
             raise Exception('grade must be int and 0=<grade<=100 ') #触发异常
        self._grade = grade
    def getClassNumber(self):
        return self._classNumber
    def getGrade(self):
        return self._grade
    def display(self):
        super(Student, self).display()
        print(self.getClassNumber(), self.getGrade())

class Teacher(Person):
    def __init__(self, number, name, title, department):
        super(Teacher, self).__init__(number, name)
        Person.__init__(self, number, name)
        self.setTitle(title)
        self.setDepartment(department)
    def setTitle(self, title):
        if type(title) != str:
            raise Exception('title must be string')
        self._title = title
    def setDepartment(self, department):
        if type(department) != str:
            raise Exception('department must be string')
        self._department = department
    def getTitle(self):
        return self._title
    def getDepartment(self):
        return self._department
    def display(self):
        super(Teacher, self).display()
        print(self.getTitle(), self.getDepartment())

if __name__  ==  '__main__':
    print('学号          姓名')
    Zhangsan = Student(12345678911, '张三', 232, 100)
    Zhangsan.display()
    teacher = Teacher(20000000000, 'li', '教授', 'AI')
    teacher.display()

实验结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值