Python中__str__能否返回多行内容 如何单次打印多个PhoneBook实例
问题1:
__str__ 方法是否可以返回多行字符串? 完全可以。Python的__str__魔法方法仅要求返回值为字符串类型,对字符串内部是否包含换行符\n没有任何限制,你当前代码中的__str__实现本身就已经是返回多行字符串的正确写法。
问题2:如何仅调用一次
print(obj)打印多个联系人内容 你当前的实现存在不必要的重复操作:PhoneBook类本身设计了contacts列表用来存储多条联系人,完全不需要每次新增联系人就新建一个PhoneBook实例,优化方案如下:
优化后完整代码
class PhoneBook: def __init__(self): self.contacts = [] def __str__(self): # 遍历所有联系人拼接多行字符串 result = [] for contact in self.contacts: result.append(f'{contact["name"]}') result.append(f'office phone: {contact["phone"]}') result.append(f'email address: {contact["email"]}\n') return '\n'.join(result) def add(self, name, office, email): self.contacts.append({ 'name': name, 'phone': office, 'email': email }) # 仅实例化一次PhoneBook,添加多个联系人 obj = PhoneBook() obj.add("Kim", office="1234567", email="kim@company.com") obj.add("Park", office="2345678", email="park@company.com") # 单次调用print即可输出所有联系人 print(obj)
优化说明
- 修正了原
__str__方法只取contacts[0]第一条联系人的问题,改为遍历所有联系人拼接输出字符串 - 无需重复实例化
PhoneBook对象,所有联系人都添加到同一个实例中,仅需一次print调用即可输出全部联系人信息 - 如果你确实有需要管理多个独立通讯录(比如不同部门的通讯录)的场景,可以把多个
PhoneBook实例存入列表,再自定义一个打印函数遍历列表输出所有实例内容,同样可以做到仅调用一次自定义打印函数完成全部输出。
内容的提问来源于stack exchange,提问作者y J.
相关产品推荐
相关产品推荐

