这个学生的类需要体现面向对象编程的继承、封装和多态性的代码
时间: 2024-05-08 21:15:48 浏览: 76
下面是一个基于面向对象编程的学生类示例,体现了继承、封装和多态性的特性:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
def get_age(self):
return self.age
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def get_student_id(self):
return self.student_id
def __str__(self):
return f"{self.get_name()} ({self.get_age()}) - Student ID: {self.get_student_id()}"
class Classroom:
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
def get_all_students(self):
return self.students
def get_student_by_id(self, student_id):
for student in self.students:
if student.get_student_id() == student_id:
return student
return None
classroom = Classroom()
student1 = Student("Alice", 20, "12345")
student2 = Student("Bob", 21, "54321")
classroom.add_student(student1)
classroom.add_student(student2)
for student in classroom.get_all_students():
print(student)
print(classroom.get_student_by_id("12345"))
```
在这个示例中,我们定义了一个 `Person` 类,它包含了一个人的基本信息,例如姓名和年龄。`Student` 类继承了 `Person` 类,并添加了一个学生 ID 属性。我们还定义了一个 `Classroom` 类,它包含了一个学生列表,并提供了一些方法用于管理学生,例如添加学生和根据学生 ID 查找学生。
在这个示例中,我们使用了封装来隐藏类的内部细节。例如,我们使用了 `get_name` 和 `get_age` 方法来获取 `Person` 类中的姓名和年龄属性,而不是直接访问这些属性。这样可以确保类的内部实现细节不会被外部访问者所知道。
我们还使用了多态性来处理不同类型的对象。例如,在 `Classroom` 类中,我们可以添加任何类型的学生对象,只要它们继承自 `Person` 类。在 `Classroom` 类的 `get_student_by_id` 方法中,我们可以返回 `Student` 对象,因为它继承自 `Person` 类,并具有 `get_student_id` 方法。
继承也是面向对象编程的一个重要特性。在这个示例中,我们使用 `Student` 类继承了 `Person` 类的属性和方法,从而避免了代码重复。
阅读全文