Python如何取出字典中存储的类实例并打印其属性值
报错原因
- 拆包语法错误:
for key, in Customers中的多余逗号会要求Python将遍历到的单个字典键拆分为至少1个元素的序列,而你的字典键为客户编号(多为数字/字符串类型),无法匹配拆包规则,直接触发ValueError: too many values to unpack (expected 1)。 - 实例调用逻辑错误:代码中
Customer.get_name()是直接对Customer类调用访问器方法,没有指向你存储在字典中的具体实例,即使遍历语法修正也无法拿到对应客户的属性值。
正确实现代码
以下代码默认你定义的Customer类访问器方法为get_name()、get_address()、get_phone()、get_customer_number()、get_mailing_list(),如果你的方法命名不同,替换为自定义的方法名即可:
# 打印要求的表头 print("Customer Number -- Name -- Address -- Phone -- Mailing List?") # 调用字典的items()方法同时遍历键、值(客户实例) for customer_num, customer_obj in Customers.items(): # 把布尔类型的邮件列表状态转成更易读的Yes/No mail_tag = "Yes" if customer_obj.get_mailing_list() else "No" # 按格式输出对应字段 print(f"{customer_num} -- {customer_obj.get_name()} -- {customer_obj.get_address()} -- {customer_obj.get_phone()} -- {mail_tag}")
如果你希望直接从实例中取客户编号属性而非使用字典键,也可以只遍历字典的值:
print("Customer Number -- Name -- Address -- Phone -- Mailing List?") for customer_obj in Customers.values(): mail_tag = "Yes" if customer_obj.get_mailing_list() else "No" print(f"{customer_obj.get_customer_number()} -- {customer_obj.get_name()} -- {customer_obj.get_address()} -- {customer_obj.get_phone()} -- {mail_tag}")
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

