Python两个类实例追加到同一列表,循环调用展示方法报属性错误如何解决?
错误原因
college_records列表同时存储了Students和Instructor两个类的实例,全局遍历调用display_student_information()时,Instructor类实例不存在该方法,因此触发属性错误。
解决方案
方案1:增加类型判断(快速修复)
使用Python内置isinstance()方法判断实例所属类,再调用对应方法,单次遍历即可完成所有信息展示:
for item in college_records: if isinstance(item, Students): item.display_student_information() elif isinstance(item, Instructor): item.display_instr_information()
如果需要分开两次分别展示学生、讲师列表,调整遍历逻辑即可:
# 仅展示学生信息 for item in college_records: if isinstance(item, Students): item.display_student_information() # 仅展示讲师信息 for item in college_records: if isinstance(item, Instructor): item.display_instr_information()
方案2:统一方法名(符合面向对象设计规范)
给两个类定义同名的信息展示方法,利用多态特性简化调用,不需要额外做类型判断。
- 类定义调整示例:
class Students: # 其余原有逻辑保持不变 def display_info(self): # 写入原有display_student_information的实现逻辑 pass class Instructor: # 其余原有逻辑保持不变 def display_info(self): # 写入原有display_instr_information的实现逻辑 pass
- 遍历调用代码:
for item in college_records: item.display_info()
该方案扩展性更强,后续新增其他人员类(如行政人员)时,只要对应实现display_info()方法,不需要修改遍历调用代码。
内容的提问来源于stack exchange,提问作者kabdul
相关产品推荐
相关产品推荐

