codeXprojectX Ответов: 2

Как хранить объекты в списке типа класса


У меня возникли проблемы с хранением объектов класса в списке(типа класса).

В приведенном ниже коде я получаю сведения о сотруднике(имя и ранг) всех.. вместо вызываемого объекта.

Я ищу python альтернативу 'Employee[] emp_obj = new Employee[6]' из java.



Как ожидается, О/Р :
#(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)


Что я уже пробовал:

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()

Richard MacCutchan

Какие результаты вы видите?

codeXprojectX

Спасибо Ричарду за ответ.

Мой выход:

Название отдела : IT
Бюджет : 3000 долларов
Сотрудники : Джон(3),Кришна(4),Паван(5),Рахим(6),Джесси(7),Чаран(2),
Название Отдела : Продажи
Бюджет : 3500 долларов
Сотрудники : Джон(3),Кришна(4),Паван(5),Рахим(6),Джесси(7),Чаран(2),

В приведенном выше выводе я могу видеть все детали сотрудника..вместо вызываемого объекта(как в ожидаемом выводе)

2 Ответов

Рейтинг:
7

Richard MacCutchan

Попробовать это:

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()


codeXprojectX

Работал.Большое тебе спасибо Ричард :)

Рейтинг:
16

markkuk

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

__budget = 1000

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

empnames = []

Вы определили __бюджет и empnames как переменная класса[^], поэтому они являются общими для всех экземпляров класса. Вы должны определить их внутри __init__ функция вместо этого:
def __init__(self, dept):
    self.department = dept
    self.empnames = []
    self. __budget = 1000


codeXprojectX

Спасибо. Это сработало :)

codeXprojectX

Кроме того, как мы можем создать список типов классов, как в java
(Employee[] emp_obj = новый сотрудник[6])

Спасибо

Richard MacCutchan

Все списки в Python являются динамическими, поэтому вам не нужно указывать размер при их создании.