如何以字典键为实例名动态创建Courses类实例?
动态创建课程类实例并通过课程名引用
推荐方案:用字典集中管理实例
直接将所有课程实例存储在字典中,既避免命名空间污染,又方便统一管理,是处理大量实例的最优选择。
class Courses: def __init__(self, course, course_id, limit): self.course = course self.course_id = course_id self.limit = limit def __str__(self): return f'Course: {self.course}, Course ID: {self.course_id}, Limit: {self.limit}' courses = { 'English': {'course_id': 1000, 'limit': 30}, 'Math': {'course_id': 1001, 'limit': 20}, 'History': {'course_id': 1002, 'limit': 50}, 'Science': {'course_id': 1003, 'limit': 25}, } # 初始化存储实例的字典 course_instances = {} for course_name, info in courses.items(): # 将课程名转为小写作为键,方便统一调用格式 key = course_name.lower() course_instances[key] = Courses(course_name, info['course_id'], info['limit']) # 测试访问 print(course_instances['math'].limit) # 输出:20 print(course_instances['math']) # 输出:Course: Math, Course ID: 1001, Limit: 20
可选方案:动态添加到命名空间(不推荐)
如果一定要通过math.limit这种直接变量名访问,可以借助globals()动态创建变量,但这种方式容易覆盖现有变量,不利于维护,仅适合小规模场景。
for course_name, info in courses.items(): var_name = course_name.lower() # 动态添加到全局命名空间 globals()[var_name] = Courses(course_name, info['course_id'], info['limit']) # 直接访问变量 print(math.limit) # 输出:20 print(math) # 输出:Course: Math, Course ID: 1001, Limit: 20
优雅进阶:用容器类管理实例
通过自定义容器类,将实例作为类属性存储,既保留属性式访问的便捷性,又避免污染全局命名空间。
class CourseContainer: def __init__(self, courses_dict): for course_name, info in courses_dict.items(): # 动态设置属性 setattr(self, course_name.lower(), Courses(course_name, info['course_id'], info['limit'])) # 创建容器对象 course_box = CourseContainer(courses) # 通过属性访问实例 print(course_box.math.limit) # 输出:20 print(course_box.math) # 输出:Course: Math, Course ID: 1001, Limit: 20
内容的提问来源于stack exchange,提问作者jpanknin
相关产品推荐
相关产品推荐

