-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathemployee.py
122 lines (93 loc) · 3.95 KB
/
employee.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from typing import Dict
from .exception import NoSuchPositionError
POSITIONS: Dict[str, int] = {
'CEO': 0,
'manager': 1,
'developer': 2,
'tester': 3,
}
def get_position_level(position_name: str) -> int:
"""
Функция возвращает уровень позиции по ее названию.
Если должности нет в базе поднимается исключение `NoSuchPositionError(position_name)`
"""
try:
return POSITIONS[position_name]
except KeyError as exp:
raise NoSuchPositionError(position_name) from exp
class Employee:
"""
Класс - сотрудник
Возможности:
1. Реализована возможность сравнения двух сотрудников в зависимости от занимаемой должности - метод __eq__
2. Возможность получить зарплату через метод get_salary
"""
name: str
position: str
_salary: int
def __init__(self, name: str, position: str, salary: int):
"""
Задача: реализовать конструктор класса, чтобы все тесты проходили
"""
# пиши свой код здесь
if not isinstance(salary, int):
raise ValueError("Salary must be an integer")
self.name = name
self.position = position
self._salary = salary
try:
self.position_level = get_position_level(self.position)
except NoSuchPositionError:
self.position_level = -1
def get_salary(self) -> int:
"""
Метод возвращает зарплату сотрудника.
"""
# пиши свой код здесь
return self._salary
def __eq__(self, other: object) -> bool:
"""
Задача: реализовать метод сравнение двух сотрудников, чтобы все тесты проходили.
Сравнение происходит по уровню позиции см. `get_position_level`.
Если что-то идет не так - бросаются исключения. Смотрим что происходит в тестах.
"""
# пиши свой код здесь
if not isinstance(other, Employee):
raise TypeError("Comparison only possible between Employee instances")
try:
return get_position_level(self.position) == get_position_level(other.position)
except NoSuchPositionError:
raise ValueError("Invalid position for comparison")
def __str__(self):
"""
Задача: реализовать строковое представление объекта.
Пример вывода: 'name: Ivan position manager'
"""
# пиши свой код здесь
return f'name: {self.name} position: {self.position}'
def __hash__(self):
return id(self)
class Developer(Employee):
"""
Сотрудник - разработчик
"""
language: str
position: str = 'developer'
def __init__(self, name: str, salary: int, language: str):
"""
Задача: реализовать конструктор класса, используя конструктор родителя
"""
# пиши свой код здесь
super().__init__(name, self.position, salary)
self.language = language
class Manager(Employee):
"""
Сотрудник - менеджер
"""
position: str = 'manager'
def __init__(self, name: str, salary: int):
"""
Задача: реализовать конструктор класса, используя конструктор родителя
"""
# пиши свой код здесь
super().__init__(name, self.position, salary)