AttributeError:'Contact'对象无'print_entry'属性的报错原因与解决方法
报错原因与修复方案
报错产生原因
- 直接触发错误的原因是你编写的
Contact类没有实现下层固定代码调用的print_entry实例方法:print_directory函数遍历联系人列表时,会对每个联系人对象调用print_entry()方法输出单条联系人信息,该方法不存在就会抛出AttributeError。 - 除此之外你的
Contact类还缺少后续main函数调用的其他必要方法,修复print_entry后还会继续触发同类报错,缺失的方法包括set_first_name、set_title、get_cell_number、get_area_code,同时缺少存储头衔的实例属性。
修复方案
在现有Contact类中补全所有缺失的属性和方法即可,修复后的完整Contact类代码如下:
class Contact: def __init__(self,fname,lname,p_number): self.fname = fname self.lname = lname self.p_number = p_number self.title = "" # 新增存储头衔的属性 # 原有get方法保留 def getfname(self): return self.fname def getlname(self): return self.lname def getp_number(self): return self.p_number # 新增缺失的print_entry方法,输出单条联系人信息 def print_entry(self): # 有头衔就输出头衔,没有就只输出姓名+电话 if self.title: print(f"{self.title} {self.fname} {self.lname}: {self.p_number}") else: print(f"{self.fname} {self.lname}: {self.p_number}") # 新增修改名字的方法 def set_first_name(self, new_fname): self.fname = new_fname # 新增设置头衔的方法 def set_title(self, title): self.title = title # 新增获取电话号码的方法 def get_cell_number(self): return self.p_number # 新增获取区号的方法,取号码前3位 def get_area_code(self): return self.p_number[:3]
修复后运行代码即可正常输出两次联系人列表,以及最后的区号查询结果。
内容的提问来源于stack exchange,提问作者Phillip Hackley
相关产品推荐
相关产品推荐

