使用__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()
为什么这样能解决问题?
- 避免内存地址显示:Python默认的对象打印逻辑是显示内存地址,但只要你重写了
__str__方法,print()就会优先调用这个方法返回的字符串。 - 每个员工对应正确编号:把员工编号作为实例属性和对象绑定,每个对象的编号都是独立的,不会出现所有对象显示同一个编号的问题。
- 移除无效循环:原代码中的
for循环毫无意义,因为return语句会在第一次循环时就终止方法,直接删除循环即可。
内容的提问来源于stack exchange,提问作者lii3cu
相关产品推荐
相关产品推荐

