Search code examples
pythoninheritancereturn

How to return by for loop python?


I have a parent class and two child class. I can create one object from any class my program run without Error. But when use add_emp method of Manager class, objects added to emp list but when use print_emp method objects that was add to list not return!!!!

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):
    print(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:
            return (emp.Fullname())

Solution

  • Try return [emp.Fullname() for emp in self.emps].

    In print_emp(self): clause of your code, python loops over self.emps. That is, it first sets emps to be the first item of self.emps. So emp.Fullname() initially is the name of the first employee. Now when python sees return, it returns this emp.Fullname(), and just finishes the method. This is why your code returns only the name of the first employee.