ООП Python 3 TypeError: HourlyEmployee() takes no arguments В чем именно проблема?
Везде перелазил, нигде не нашел ответа, помогайте) Как не запущу выдает ошибку
Traceback (most recent call last):
File "c:\Users\rsupr\Desktop\papka\main.py", line 76, in <module>
employee1 = HourlyEmployee("Иван", "Иванов", "01.01.1990", "Уборщик", 100, 40)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: HourlyEmployee() takes no arguments
Вот сам код
# Создаем класс Employee, который будет базовым для остальных классов
class Employee:
# Инициализируем объект класса Employee с помощью конструктора
def init(self, first_name, last_name, birth_date, position, salary):
self.first_name = first_name
self.last_name = last_name
self.birth_date = birth_date
self.position = position
self.salary = salary
# Создаем класс HourlyEmployee, который будет наследоваться от класса Employee
class HourlyEmployee(Employee):
# Инициализируем объект класса HourlyEmployee с помощью конструктора
def init(self, first_name, last_name, birth_date, position, salary_rate, hours_worked):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, salary_rate * hours_worked)
# Создаем класс SalariedEmployee, который будет наследоваться от класса Employee
class SalariedEmployee(Employee):
# Инициализируем объект класса SalariedEmployee с помощью конструктора
def init(self, first_name, last_name, birth_date, position, annual_income):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, annual_income / 12)
# Создаем класс HiredEmployee, который будет наследоваться от класса Employee
class HiredEmployee(Employee):
# Инициализируем объект класса HiredEmployee с помощью конструктора
def init(self, first_name, last_name, birth_date, position, annual_income):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, annual_income / 12)
# Создаем класс Manager, который будет наследоваться от класса HiredEmployee
class Manager(HiredEmployee):
# Инициализируем объект класса Manager с помощью конструктора
def init(self, first_name, last_name, birth_date, position, annual_income, sales_percentage):
# Вызываем конструктор родительского класса с помощью super() и учитываем процент от продаж
super().init(first_name, last_name, birth_date, position, annual_income + (annual_income * sales_percentage))
# Создаем класс Executive, который будет наследоваться от класса HiredEmployee
class Executive(HiredEmployee):
# Инициализируем объект класса Executive с помощью конструктора
def init(self, first_name, last_name, birth_date, position, annual_income, bonus):
# Вызываем конструктор родительского класса с помощью super() и учитываем бонус
super().init(first_name, last_name, birth_date, position, annual_income + bonus)
# Создаем класс Company
class Company:
# Инициализируем объект класса Company с помощью конструктора
def init(self):
self.employees = []
# Метод hire() для найма нового сотрудника
def hire(self, employee):
self.employees.append(employee)
# Метод fire() для увольнения сотрудника
def fire(self, employee):
self.employees.remove(employee)
# Метод promote() для повышения должности и зарплаты сотрудника
def promote(self, employee, new_position, new_salary):
employee.position = new_position
employee.salary = new_salary
# Метод calculate_salaries() для подсчета общей зарплаты сотрудников
def calculate_salaries(self):
total_salary = 0
for employee in self.employees:
total_salary += employee.salary
return total_salary
# Создаем объект класса Company
company = Company()
# Создаем объекты классов HourlyEmployee, SalariedEmployee, Manager и Executive
employee1 = HourlyEmployee("Иван", "Иванов", "01.01.1990", "Уборщик", 100, 40)
employee2 = SalariedEmployee("Петр", "Петров", "02.02.1991", "Программист", 50000)
employee3 = Manager("Сидор", "Сидоров", "03.03.1992", "Менеджер по продажам", 100000, 0.05)
employee4 = Executive("Алексей", "Алексеев", "04.04.1993", "Генеральный директор", 1000000, 50000)
# Нанимаем новых сотрудников
company.hire(employee1)
company.hire(employee2)
company.hire(employee3)
company.hire(employee4)
# Выводим общую зарплату сотрудников
print(company.calculate_salaries())
# Увольняем одного из сотрудников
company.fire(employee1)
# Выводим общую зарплату сотрудников после увольнения
print(company.calculate_salaries())
# Повышаем должность и зарплату одного из сотрудников
company.promote(employee2, "Ведущий программист", 75000)
# Выводим общую зарплату сотрудников после повышения
print(company.calculate_salaries())
Ответы (1 шт):
Автор решения: Danila Kartovitskii
→ Ссылка
В Python метод-конструктор должен называться __init__ (с двумя подчеркиваниями в начале и в конце имени метода)
Вот рабочий вариант кода:
# Создаем класс Employee, который будет базовым для остальных классов
class Employee:
# Инициализируем объект класса Employee с помощью конструктора
def init(self, first_name, last_name, birth_date, position, salary):
self.first_name = first_name
self.last_name = last_name
self.birth_date = birth_date
self.position = position
self.salary = salary
# Создаем класс HourlyEmployee, который будет наследоваться от класса Employee
class HourlyEmployee(Employee):
# Инициализируем объект класса HourlyEmployee с помощью конструктора
def __init__(self, first_name, last_name, birth_date, position, salary_rate, hours_worked):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, salary_rate * hours_worked)
# Создаем класс SalariedEmployee, который будет наследоваться от класса Employee
class SalariedEmployee(Employee):
# Инициализируем объект класса SalariedEmployee с помощью конструктора
def __init__(self, first_name, last_name, birth_date, position, annual_income):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, annual_income / 12)
# Создаем класс HiredEmployee, который будет наследоваться от класса Employee
class HiredEmployee(Employee):
# Инициализируем объект класса HiredEmployee с помощью конструктора
def __init__(self, first_name, last_name, birth_date, position, annual_income):
# Вызываем конструктор родительского класса с помощью super()
super().init(first_name, last_name, birth_date, position, annual_income / 12)
# Создаем класс Manager, который будет наследоваться от класса HiredEmployee
class Manager(HiredEmployee):
# Инициализируем объект класса Manager с помощью конструктора
def __init__(self, first_name, last_name, birth_date, position, annual_income, sales_percentage):
# Вызываем конструктор родительского класса с помощью super() и учитываем процент от продаж
super().init(first_name, last_name, birth_date, position, annual_income + (annual_income * sales_percentage))
# Создаем класс Executive, который будет наследоваться от класса HiredEmployee
class Executive(HiredEmployee):
# Инициализируем объект класса Executive с помощью конструктора
def __init__(self, first_name, last_name, birth_date, position, annual_income, bonus):
# Вызываем конструктор родительского класса с помощью super() и учитываем бонус
super().init(first_name, last_name, birth_date, position, annual_income + bonus)
# Создаем класс Company
class Company:
# Инициализируем объект класса Company с помощью конструктора
def __init__(self):
self.employees = []
# Метод hire() для найма нового сотрудника
def hire(self, employee):
self.employees.append(employee)
# Метод fire() для увольнения сотрудника
def fire(self, employee):
self.employees.remove(employee)
# Метод promote() для повышения должности и зарплаты сотрудника
def promote(self, employee, new_position, new_salary):
employee.position = new_position
employee.salary = new_salary
# Метод calculate_salaries() для подсчета общей зарплаты сотрудников
def calculate_salaries(self):
total_salary = 0
for employee in self.employees:
total_salary += employee.salary
return total_salary
# Создаем объект класса Company
company = Company()
# Создаем объекты классов HourlyEmployee, SalariedEmployee, Manager и Executive
employee1 = HourlyEmployee("Иван", "Иванов", "01.01.1990", "Уборщик", 100, 40)
employee2 = SalariedEmployee("Петр", "Петров", "02.02.1991", "Программист", 50000)
employee3 = Manager("Сидор", "Сидоров", "03.03.1992", "Менеджер по продажам", 100000, 0.05)
employee4 = Executive("Алексей", "Алексеев", "04.04.1993", "Генеральный директор", 1000000, 50000)
# Нанимаем новых сотрудников
company.hire(employee1)
company.hire(employee2)
company.hire(employee3)
company.hire(employee4)
# Выводим общую зарплату сотрудников
print(company.calculate_salaries())
# Увольняем одного из сотрудников
company.fire(employee1)
# Выводим общую зарплату сотрудников после увольнения
print(company.calculate_salaries())
# Повышаем должность и зарплату одного из сотрудников
company.promote(employee2, "Ведущий программист", 75000)
# Выводим общую зарплату сотрудников после повышения
print(company.calculate_salaries())