Объект как тип параметра в ООП в 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.
Укажите в методе тип принимаемого параметра
в явном виде.