这个实验主要通过了解对象、类、封装、继承、方法、构造函数和析构函数等面向对象的程序设计的基本概念,掌握 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()
实验结果: