I want to create a function to get the worker with the biggest salary. How can I write it?
dataclasses import dataclass
from decimal import Decimal
from typing import Self
@dataclass
class Worker:
name: str
surname: str
age: int
salary: Decimal
@classmethod
def data_input(cls):
return cls(
name=input('Name:\n'),
surname=input('Surname:\n'),
age=int(input('Age:\n')),
salary=Decimal(input('Decimal:\n'))
)
def __str__(self):
return f'{self.name}, {self.surname}, {self.age}, {self.salary}'
@dataclass
class WorkerService(Worker):
workers = list[Worker]
def get_worker_with_biggest_salary(self, workers: workers) -> Self:
return
CodePudding user response:
So to directly answer your question I would use the max built-in to get the largest salary.
class WorkerService:
workers: list[Worker]
def get_worker_with_biggest_salary(self):
return max(self.workers, key=lambda worker: worker.salary)
def __init__(self):
self.workers = list()
However I would add that WorkerService should not be a dataclass. Dataclasses are suppose to hold information and that is about it. If you class has a bunch of functions that manipulate its state then it should just be a class and not a dataclass
Also for Worker you have a function called data_input. dataclass already lets you create the class that way. You should instead move input handling out of the class and then create the instance with what is inputted. Also WorkerService has an instance field called workers yet when you wrote get_worker_with_biggest_salary you take in an argument of workers. You should either take in the argument or use add_worker or remove_worker and then work off the instance field. Heres an example...
name = input('Name:\n'),
surname = input('Surname:\n'),
age = int(input('Age:\n')),
salary = Decimal(input('Decimal:\n'))
worker = Worker(
name=name,
surname=surname,
age=age,
salary=salary
)
worker_service.add_worker(worker)
highest_salary_worker = worker_service.get_worker_with_biggest_salary()
