# Общее контрольное задание по теме 9 ## Задание: Создайте и запишите в модуль класс, содержащий следующие компоненты: - конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; - метод для обеспечения операции повышения оклада сотрудника на заданное значение; - метод для обеспечения перевода сотрудника из одного отдела в другой; - метод для изменения должности сотрудника; - свойство, содержащее перечень (список) поощрений сотрудника. Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. ## Решение: - Содержание модуля: ``` >>>class Employee: def __init__(self, fio="Unknown", otdel="Not specified", dolzhnost="Not specified", oklad=0): self.fio = fio self.otdel = otdel self.dolzhnost = dolzhnost self.oklad = oklad self._poosherenia = [] def increase_oklad(self, amount): if amount < 0: print(f"Error: amount cannot be negative ({amount})") return self.oklad else: old_oklad = self.oklad self.oklad += amount print(f"{self.fio}: salary increased by {amount:,} rub. " f"({old_oklad:,} → {self.oklad:,} rub.)") return self.oklad def change_department(self, new_department): old_department = self.otdel self.otdel = new_department print(f"Employee {self.fio} transferred from {old_department} to {new_department}.") def change_position(self, new_position): old_position = self.dolzhnost self.dolzhnost = new_position print(f"Employee {self.fio} position changed from {old_position} to {new_position}.") @property def poosherenia(self): return self._poosherenia.copy() def add_poosherenia(self, text): """Adds a new commendation""" self._poosherenia.append(text) print(f"{self.fio}: added commendation: '{text}'") def show_info(self): """Shows employee information""" print(f"\n{'='*40}") print(f"EMPLOYEE: {self.fio}") # ← английское имя! print(f"Department: {self.otdel}") # ← английское имя! print(f"Position: {self.dolzhnost}") # ← английское имя! print(f"Salary: {self.oklad} rub.") if self._poosherenia: print("Commendations:") for item in self._poosherenia: print(f" • {item}") else: print("No commendations") print(f"{'='*40}") ``` - Тест модуля: ``` >>>import Mod_tema9 >>>sotr1 = Mod_tema9.Employee("Иванов И.И.", "IT-отдел", "Программист", 80000) >>>sotr1.show_info() ======================================== EMPLOYEE: Иванов И.И. Department: IT-отдел Position: Программист Salary: 80000 rub. No commendations ======================================== >>>sotr2 = Mod_tema9.Employee("Петрова А.С.", "Бухгалтерия", "Бухгалтер", 60000) >>>sotr2.show_info() ======================================== EMPLOYEE: Петрова А.С. Department: Бухгалтерия Position: Бухгалтер Salary: 60000 rub. No commendations ======================================== >>>sotr1.change_department("Отдел разработки") Employee Иванов И.И. transferred from IT-отдел to Отдел разработки. >>>sotr1.increase_oklad(15000) Иванов И.И.: salary increased by 15,000 rub. (80,000 → 95,000 rub.) 95000 >>>sotr1.change_position("Старший программист") Employee Иванов И.И. position changed from Программист to Старший программист. >>>sotr1.add_poosherenia("Заработал, молодец") Иванов И.И.: added commendation: 'Заработал, молодец' >>>sotr1.add_poosherenia("За все хорошее") Иванов И.И.: added commendation: 'За все хорошее' >>>sotr2.change_department("Отдел финансовых махинаций") Employee Петрова А.С. transferred from Бухгалтерия to Отдел финансовых махинаций. >>>sotr2.increase_oklad(60000) Петрова А.С.: salary increased by 60,000 rub. (60,000 → 120,000 rub.) 120000 >>>sotr2.change_position("Главный бухгалтер") Employee Петрова А.С. position changed from Бухгалтер to Главный бухгалтер. >>>sotr2.add_poosherenia("За дело") Петрова А.С.: added commendation: 'За дело' ```