Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpAnOb 63 of 174 menu
◀ ▶

Объект как тип параметра в ООП в Python

Пусть у нас дан вот такой класс Employee:

class Employee: def __init__(self, name, salary): self.__name = name self.__salary = salary def get_name(self): return self.__name def get_salary(self): return self.__salary

Также пусть дан класс EmployeesCollection для хранения коллекции работников:

class EmployeesCollection: def __init__(self): self.__employees = [] # список работников # Добавляет работника в набор def add(self, employee): # параметр - объект класса Employee self.__employees.append(employee) # добавим объект в набор def get_total_salary(self): total = 0 for employee in self.__employees: total += employee.get_salary() return total

Рассмотрим внимательно метод add класса EmployeesCollection: в нем параметром передается объект класса Employee. Однако программисту, читающему наш код, сходу тяжело будет понять, что параметром метода add должен служить именно объект и именно класса Employee.

Да, мы можем оставить комментарий в нашем коде, чтобы прояснить ситуацию, но это все равно не убережет программиста от ошибок, если он попытается передать, к примеру, объект какого-нибудь другого класса или вообще список.

Можно также явно задать и тип параметра, в который будет передаваться объект - мы можем точно сказать, объект какого класса там ожидается.

Для этого после имени параметра пишут двоеточие и имя ожидаемого класса, в нашем случае Employee. Класс Employee уже должен быть объявлен выше по файлу.

Давайте переделаем наш метод add:

class EmployeesCollection: def __init__(self): self.__employees = [] # Явно укажем тип параметра: def add(self, employee: Employee): self.__employees.append(employee) def get_total_salary(self): total = 0 for employee in self.__employees: total += employee.get_salary() return total

Сделайте класс Post, в котором будут следующие свойства, доступные только для чтения: name и salary.

Создайте несколько объектов класса Post: программист, менеджер водитель.

Сделайте класс Employee, в котором будут следующие свойства: name и surname. Пусть начальные значения этих свойств будут передаваться параметром в конструктор.

Сделайте геттеры и сеттеры для свойств name и surname.

Пусть теперь третьим параметром конструктора будет передаваться должность работника, представляющая собой объект класса Post. Укажите тип этого параметра в явном виде.

Сделайте так, чтобы должность работника (то есть переданный объект с должностью) записывалась в свойство post.

Создайте объект класса Employee с должностью программист. При его создании используйте один из объектов класса Post, созданный нами ранее.

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

Реализуйте в классе Employee метод change_post, который будет изменять должность работника на другую. Метод должен принимать параметром объект класса Post. Укажите в методе тип принимаемого параметра в явном виде.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить