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

使用__str__与print时避免输出对象内存地址,员工类输出优化问询

解决员工对象__str__方法的显示问题

你当前的代码存在两个核心问题:一是__str__里的for循环完全无效(因为return会直接终止循环,永远只会返回第一个迭代的结果);二是员工编号不应该在__str__里临时生成,而应该和每个员工对象绑定,作为实例属性存在。下面是具体的修复方案:

第一步:修正Employee类的实现

在employee.py中,我们需要给每个员工对象添加独立的编号属性,并改写__str__方法,让它返回当前对象的专属信息:

class Employee:
    def __init__(self, emp_num, name, id_num, department, job_title):
        # 将员工编号作为实例属性传入,每个对象拥有自己的编号
        self.__emp_num = emp_num
        self.__name = name
        self.__id_num = id_num
        self.__department = department
        self.__job_title = job_title

    def __str__(self):
        # 直接返回当前对象的信息,无需循环
        return f'Employee {self.__emp_num}:\n' \
               f'Name: {self.__name}\n' \
               f'ID Number: {str(self.__id_num)}\n' \
               f'Department: {self.__department}\n' \
               f'Job Title: {self.__job_title}'

第二步:在main文件中创建并打印对象

在你的主文件(比如main.py)中,创建3个员工对象时传入对应的编号,直接打印对象就会自动调用重写后的__str__方法,不会再显示内存地址:

from employee import Employee

def main():
    # 创建3个员工对象,每个对象传入专属的编号和信息
    emp1 = Employee(1, "John Doe", 1001, "Engineering", "Software Developer")
    emp2 = Employee(2, "Jane Smith", 1002, "Marketing", "Marketing Specialist")
    emp3 = Employee(3, "Bob Johnson", 1003, "HR", "HR Manager")

    # 打印每个对象,自动调用__str__返回格式化后的信息
    print(emp1)
    print("\n" + "-"*30 + "\n")  # 分隔线,方便区分不同员工
    print(emp2)
    print("\n" + "-"*30 + "\n")
    print(emp3)

if __name__ == "__main__":
    main()

为什么这样能解决问题?

  1. 避免内存地址显示:Python默认的对象打印逻辑是显示内存地址,但只要你重写了__str__方法,print()就会优先调用这个方法返回的字符串。
  2. 每个员工对应正确编号:把员工编号作为实例属性和对象绑定,每个对象的编号都是独立的,不会出现所有对象显示同一个编号的问题。
  3. 移除无效循环:原代码中的for循环毫无意义,因为return语句会在第一次循环时就终止方法,直接删除循环即可。

内容的提问来源于stack exchange,提问作者lii3cu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:01:38