Click here to Skip to main content
15,911,531 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am having problem storing class objects in a list(of class type).

In the below code, i get employee details(name and grade) of all.. instead of the called object.

I am looking for python alternative to 'Employee[] emp_obj = new Employee[6]' of java.



Expected o/p :
#(when it_dep.describe is called, it should print as below )

# Dept Name : IT
# Budget : 3000
# Employees : john(3),krishna(4),pawan(5)

#(when sales_dep.describe is called, it should print as below)

# Dept Name : Sales
# Budget : 3500
# Employees : Rahim(6),Jessy(7),Charan(2)


What I have tried:

Python
class Employee:
    def __init__(self,emp_name,emp_grade):
        self.emp_name = emp_name
        self.emp_grade = emp_grade

    def emp_info(self):
        return self.emp_name + "(" + str(self.emp_grade) + ")"

class Department:

    def __init__(self,dept):
        self.department = dept

    __budget = 1000

    #------------ In java --------------#
    #Employee[] emp_obj = new Employee[6]
    #counter=0
    #-----------------------------------#

    empnames = []
    def addEmployee(self, emp_details):

        if emp_details.emp_grade >= 5:
            self.__budget += 1000
        else:
            self.__budget += 500

        employee_name_grade = emp_details.emp_info()
        self.empnames.append(employee_name_grade + ",")

        # self.empgrades.append(emp_details.emp_grade)
        # self.name_and_grade = self.empnames + self.empgrades

#------------------------ Java way of storing emp class objects --------#
        #emp_obj[counter] = emp_details
        #counter += 1
#-----------------------------------------------------------------------#

    def describe(self):
        temp = "Dept Name : " + self.department + " \n Budget : " + str(self.__budget) + "\n Employees : "

        #-----------------------

        for i in self.empnames:
            temp += str(i) + ""
        print(temp)

emp1 = Employee("john",3)
emp2 = Employee("Krishna",4)
emp3 = Employee("Rahim",6)
emp4 = Employee("Jessy",7)
emp5 = Employee("Charan",2)
emp6 = Employee("Pawan",5)

#-----------------------------------

it_dep = Department("IT")
sales_dep = Department("Sales")

#-----------------------------------

it_dep.addEmployee(emp1)
it_dep.addEmployee(emp2)
it_dep.addEmployee(emp6)

sales_dep.addEmployee(emp3)
sales_dep.addEmployee(emp4)
sales_dep.addEmployee(emp5)

it_dep.describe()
sales_dep.describe()
Posted
Updated 16-Feb-18 5:22am
v3
Comments
Richard MacCutchan 16-Feb-18 8:42am    
What results do you see?
codeXprojectX 16-Feb-18 8:59am    
Thanks Richard for the reply.

My output:

Dept Name : IT
Budget : 3000
Employees : john(3),Krishna(4),Pawan(5),Rahim(6),Jessy(7),Charan(2),
Dept Name : Sales
Budget : 3500
Employees : john(3),Krishna(4),Pawan(5),Rahim(6),Jessy(7),Charan(2),

In the above output, i can see all the employee details..instead of the called object(As in the expected output)

Python
def __init__(self,dept):
    self.department = dept

__budget = 1000

#------------ In java --------------#
#Employee[] emp_obj = new Employee[6]
#counter=0
#-----------------------------------#

empnames = []

You have defined __budget and empnames as class variables[^], so they are shared by all instances of the class. You should define them inside the __init__ function instead:
Python
def __init__(self, dept):
    self.department = dept
    self.empnames = []
    self. __budget = 1000
 
Share this answer
 
Comments
codeXprojectX 16-Feb-18 10:43am    
Thank you. That worked :)
codeXprojectX 16-Feb-18 11:05am    
Also, how can we create a list of class type like in java
(Employee[] emp_obj = new Employee[6])

Thank you
Richard MacCutchan 16-Feb-18 11:33am    
All lists in Python are dynamic so you do not need to specify a size when you create it.
Try this:
Python
class Employee:
    def __init__(self,emp_name,emp_grade):
        self.emp_name = emp_name
        self.emp_grade = emp_grade

    def emp_info(self):
        return self.emp_name + "(" + str(self.emp_grade) + ")"

class Department:

    def __init__(self,dept):
        self.department = dept
        self.__budget = 1000
        self.employees = []
        
    def addEmployee(self, employee):

        if employee.emp_grade >= 5:
            self.__budget += 1000
        else:
            self.__budget += 500

        self.employees.append(employee)

    def describe(self):
        print("Dept Name :", self.department)
        print("Budget :", self.__budget)

        #-----------------------

        print("\nEmployees :")
        for i in self.employees:
            print("    ", i.emp_info())


#-----------------------------------

it_dep = Department("IT")
it_dep.addEmployee(Employee("john",3))
it_dep.addEmployee(Employee("Krishna",4))
it_dep.addEmployee(Employee("Pawan",5))

sales_dep = Department("Sales")
sales_dep.addEmployee(Employee("Rahim",6))
sales_dep.addEmployee(Employee("Jessy",7))
sales_dep.addEmployee(Employee("Charan",2))

it_dep.describe()
print("\n\n")
sales_dep.describe()
 
Share this answer
 
v3
Comments
codeXprojectX 16-Feb-18 11:36am    
Worked.Thank you so much Richard :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900