-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathemployee.py
123 lines (93 loc) · 3.88 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
123
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(name, str) and isinstance(position, str) and isinstance(salary, int)):
raise ValueError
self.name = name
self.position = position
self._salary = salary
def get_salary(self) -> int:
"""
Метод возвращает зарплату сотрудника.
"""
# пиши свой код здесь
return self._salary
def __eq__(self, other: object) -> bool:
"""
Задача: реализовать метод сравнение двух сотрудников, чтобы все тесты проходили.
Сравнение происходит по уровню позиции см. `get_position_level`.
Если что-то идет не так - бросаются исключения. Смотрим что происходит в тестах.
"""
# пиши свой код здесь
if isinstance(other, Employee):
try:
first = get_position_level(self.position)
second = get_position_level(other.position)
if first == second:
return True
return False
except NoSuchPositionError:
raise ValueError
raise TypeError
def __str__(self):
"""
Задача: реализовать строковое представление объекта.
Пример вывода: 'name: Ivan position manager'
"""
# пиши свой код здесь
return '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)