Python如何通过for循环返回遍历结果?Manager类员工列表输出异常
问题定位
你的Manager.print_emp方法逻辑存在核心错误:
- 你在
for循环内部直接使用return,会导致循环仅执行第一次就终止,不会遍历列表中的所有员工 - 原
Fullname方法内部只执行print输出,没有返回任何内容,因此return的结果是None,不会得到实际的员工信息
(注:你提到程序可正常实例化、无报错,说明实际代码的类成员缩进正常,示例代码的缩进缺失是粘贴时的格式丢失问题)
修正方案
1. 调整Emplyee类的Fullname方法
如果需要返回可复用的员工全名,不要直接打印,改为返回拼接后的字符串:
def Fullname(self): return f'{self.fname} {self.lname}'
如果只是要打印输出,也可以保留原print写法,但需要调整print_emp的逻辑。
2. 修正Manager.print_emp方法
需求1:打印所有下属员工的全名
去掉循环内的return,直接调用打印方法:
def print_emp(self): for emp in self.emps: emp.Fullname()
需求2:返回所有下属员工的全名列表
循环结束后再统一返回结果,不要在循环内提前return:
def print_emp(self): return [emp.Fullname() for emp in self.emps]
可运行完整示例代码
class Emplyee: increaspay = 1.09 def __init__(self, fname, lname, email,pay): self.fname = fname self.lname = lname self.email = email self.pay = pay def Fullname(self): # 改为返回字符串,方便后续调用 return f'{self.fname} {self.lname}' def Applypay(self): print(f'NewPay = {int(self.pay*Emplyee.increaspay)}') class Developer(Emplyee): def __init__(self, fname, lname, email, pay, lang): super().__init__(fname, lname, email, pay) self.lang = lang class Manager(Emplyee): def __init__(self, fname, lname, email, pay, emps=None): super().__init__(fname, lname, email, pay) if emps is None: self.emps = [] else: self.emps = emps def add_emp(self, emp): if emp not in self.emps: self.emps.append(emp) def remove_emp(self, emp): if emp in self.emps: self.emps.remove(emp) def print_emp(self): # 打印所有员工全名 for emp in self.emps: print(emp.Fullname()) # 测试调用 if __name__ == "__main__": dev1 = Developer("三", "张", "zhangsan@test.com", 10000, "Python") dev2 = Developer("四", "李", "lisi@test.com", 12000, "Java") mgr = Manager("五", "王", "wangwu@test.com", 20000) mgr.add_emp(dev1) mgr.add_emp(dev2) mgr.print_emp()
测试输出
运行上述代码会正常输出:
三 张 四 李
内容的提问来源于stack exchange,提问作者user15742155
相关产品推荐
相关产品推荐

