Python中如何关联多个类,使类实例拥有其他类的属性?
学生数据类关联及筛选实现方案
类关联方法
你可以新增一个Student聚合类,将已有的personal_info、date_of_birth、grades三个独立类的实例作为属性传入,即可让学生实例同时拥有三类属性,无需修改原有类的代码。
假设你现有三个类的结构如下:
date_of_birth类:包含年、月、日三个属性personal_info类:包含姓名、性别等基础属性,内置date_of_birth类实例存储出生日期grades类:包含数学、英语、科学三个科目成绩属性
聚合Student类代码示例
class Student: def __init__(self, personal_info_instance: personal_info, grades_instance: grades): # 关联个人信息实例(已内置出生日期数据) self.personal_info = personal_info_instance # 关联成绩实例 self.grades = grades_instance
筛选功能实现
筛选逻辑代码
筛选数学成绩高于英语成绩、且低于科学成绩的学生,代码如下:
def filter_target_students(student_list: list[Student]): matched_students = [] for student in student_list: math = student.grades.math english = student.grades.english science = student.grades.science # 匹配筛选条件 if math > english and math < science: matched_students.append(student) # 打印符合条件的学生信息 for stu in matched_students: print(f"姓名:{stu.personal_info.name}") print(f"出生日期:{stu.personal_info.date_of_birth.year}年{stu.personal_info.date_of_birth.month}月{stu.personal_info.date_of_birth.day}日") print(f"成绩:数学{stu.grades.math},英语{stu.grades.english},科学{stu.grades.science}\n")
调用示例
# 1. 构造单条学生数据示例 # 实例化出生日期 dob = date_of_birth(2005, 8, 21) # 实例化个人信息 p_info = personal_info("李四", dob, "女") # 实例化成绩 scores = grades(90, 82, 95) # 实例化学生对象 student = Student(p_info, scores) # 2. 构造学生列表并调用筛选方法 all_students = [student, ...] # 填入所有学生实例 filter_target_students(all_students)
内容的提问来源于stack exchange,提问作者Luca Marinescu
相关产品推荐
相关产品推荐

