Помогите разобраться в задаче по класам питон

Реализуйте иерархию классов, описывающих служащих в компании. На самом верху иерархии — класс Person, который описывает человека именем, фамилией и возрастом. Все атрибуты этого класса являются приватными.

Далее идёт класс Employee и производные от него классы Manager, Agent и Worker.

Класс «Работник» должен иметь метод расчёта заработной платы, переопределённый в каждом из производных классов. Заработная плата Manager постоянна и равна 13000, заработная плата Agent определяется как оклад 5000 + 5% объёма продаж, который хранится в специальном поле класса Agent, и заработная плата Worker определяется как 100 * число отработанных часов, которое также хранится в отдельном поле.

В основной программе создайте список из девяти объектов: первые три — Manager, следующие три — Agent и последние три — Worker. Выведите на экран величину заработной платы всех девяти служащих. Написал такой код, а дальше запутался :

class Person:
  def __init__(self,__name,__surname,__age):
    self.name=__name  
    self.surname=__surname
    self.age=__age

  def __str__(self):
    return 'Привет меня зовут {}\n Моя фамилия {}\n Мне {} лет'.format(self.name,self.surname,self.age) 

class Employe:

Ответы (1 шт):

Автор решения: handowl
from random import randint, choice
NAMES = ['Алексей', 'Женя', 'Иван', 'Петр', 'Семен', 'Антон', 'Максим']
SURNAMES = ['Первый', 'Второй', 'Иванов', 'Четвертый', 'Петров']

#generate randon name, surname, age from constants arrays above
def generate_person():
    name = choice(NAMES)
    surname = choice(SURNAMES)
    age = randint(20, 50)
    return name, surname, age


class Person:
    def __init__(self, name, surname, age):
        self.__name = name
        self.__surname = surname
        self.__age = age

    def __str__(self):
        return f'Меня зовут {self.__name} {self.__surname}. Мой возраст - {self.__age}'

        
class Employee(Person):
    def calc_salary(self):
        raise Exception('This method must be overriden')
        
    def __str__(self):
        return super().__str__() + f'\nМоя зарплата {self.calc_salary()}'

    
class Manager(Employee):
    def calc_salary(self):
        return 13000


class Agent(Employee):
    sales: int
    def calc_salary(self):
        return 5000 + .05 * self.sales


class Worker(Employee):
    hours: int
    def calc_salary(self):
        return 100 * self.hours


if __name__ == '__main__':
    employees = list()
    
    #managers
    for _ in range(3):
        employees.append(Manager(*generate_person()))
        
    #agents
    for _ in range(3):
        agent = Agent(*generate_person())
        agent.sales = randint(2000, 10000)
        employees.append(agent)
    
    #workers
    for _ in range(3):
        worker = Worker(*generate_person())
        worker.hours = randint(20, 50)
        employees.append(worker)
    
    #logging out
    for emp in employees:
        print(emp)

→ Ссылка