You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 05:36:01