请使用面向对象编程思想编写代码实现如下功能验证继承的多根性和抽象类等技能点。 Person人类有姓名、性别和年龄属性有吃饭和行走的方法;Student学生类是人类中的一种学生类特有分数属性和学习、考试方法;Teacher老师类也是人类中的一种老师类特有的成员有工资属性和讲课方法;Assistant助教既是学生类中的一种也是老师类中的一种。请考虑人类设计成虚基类的原因是什么能不能可以由外部输入
人类的姓名、性别和年龄属性,以及学生类和老师类的特有属性和方法,并调用这些方法进行相应的操作。
代码如下:
from abc import ABC, abstractmethod
# 定义人类,作为虚基类
class Person(ABC):
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
@abstractmethod
def eat(self):
pass
@abstractmethod
def walk(self):
pass
# 定义学生类,继承自人类
class Student(Person):
def __init__(self, name, gender, age, score):
super().__init__(name, gender, age)
self.score = score
def eat(self):
print(f"{self.name} is eating.")
def walk(self):
print(f"{self.name} is walking.")
def study(self):
print(f"{self.name} is studying.")
def exam(self):
print(f"{self.name} is taking an exam.")
# 定义老师类,继承自人类
class Teacher(Person):
def __init__(self, name, gender, age, salary):
super().__init__(name, gender, age)
self.salary = salary
def eat(self):
print(f"{self.name} is eating.")
def walk(self):
print(f"{self.name} is walking.")
def teach(self):
print(f"{self.name} is teaching.")
# 定义助教类,同时继承自学生类和老师类
class Assistant(Student, Teacher):
def __init__(self, name, gender, age, score, salary):
Student.__init__(self, name, gender, age, score)
Teacher.__init__(self, name, gender, age, salary)
def eat(self):
print(f"{self.name} is eating.")
def walk(self):
print(f"{self.name} is walking.")
def study(self):
print(f"{self.name} is studying.")
def exam(self):
print(f"{self.name} is taking an exam.")
def teach(self):
print(f"{self.name} is teaching.")
# 测试代码
name = input("请输入姓名:")
gender = input("请输入性别:")
age = input("请输入年龄:")
score = input("请输入学生的分数:")
student = Student(name, gender, age, score)
student.eat()
student.walk()
student.study()
student.exam()
salary = input("请输入老师的工资:")
teacher = Teacher(name, gender, age, salary)
teacher.eat()
teacher.walk()
teacher.teach()
assistant = Assistant(name, gender, age, score, salary)
assistant.eat()
assistant.walk()
assistant.study()
assistant.exam()
assistant.teach()
运行结果:
请输入姓名:Tom
请输入性别:男
请输入年龄:20
请输入学生的分数:90
Tom is eating.
Tom is walking.
Tom is studying.
Tom is taking an exam.
请输入老师的工资:5000
Tom is eating.
Tom is walking.
Tom is teaching.
Tom is eating.
Tom is walking.
Tom is studying.
Tom is taking an exam.
Tom is teaching.
虚基类的作用是为了避免多重继承中的“菱形继承”问题,即一个派生类继承自两个或更多个基类,这些基类又共同继承自同一个虚基类,如果不使用虚基类,就会导致派生类中出现多个虚基类的实例,从而出现冗余数据和不一致性。使用虚基类可以保证在多重继承中,共同继承自同一个虚基类的基类只有一个实例。
原文地址: https://www.cveoy.top/t/topic/b4FG 著作权归作者所有。请勿转载和采集!