|
| 1 | +# Домашнее задание #03 (Классы, ООП) |
| 2 | + |
| 3 | +### 1. Реализовать класс CustomList наследованием от list |
| 4 | + |
| 5 | +При этом: |
| 6 | +- `CustomList` должен наследоваться от встроенного списка `list` для получения всех методов последнего (UserList можно, но манипулировать его data напрямую не следует); |
| 7 | +- экземпляры `CustomList` можно складывать и вычитать друг с другом, с обычными списками и с числами: |
| 8 | + ```py |
| 9 | + CustomList([5, 1, 3, 7]) + CustomList([1, 2, 7]) # CustomList([6, 3, 10, 7]) |
| 10 | + CustomList([10]) + [2, 5] # CustomList([12, 5]) |
| 11 | + [2, 5] + CustomList([10]) # CustomList([12, 5]) |
| 12 | + CustomList([2, 5]) + 10 # CustomList([12, 15]) |
| 13 | + 10 + CustomList([2, 5]) # CustomList([12, 15]) |
| 14 | + |
| 15 | + CustomList([5, 1, 3, 7]) - CustomList([1, 2, 7]) # CustomList([4, -1, -4, 7]) |
| 16 | + CustomList([10]) - [2, 5] # CustomList([8, -5]) |
| 17 | + [2, 5] - CustomList([10]) # CustomList([-8, 5]) |
| 18 | + CustomList([2, 5]) - 10 # CustomList([-8, -5]) |
| 19 | + 10 - CustomList([2, 5]) # CustomList([8, 5]) |
| 20 | + ``` |
| 21 | + Возвращаться должен новый экземпляр `CustomList`, элементы которого будут результатом поэлементного сложения/вычитания элементов исходных списков. |
| 22 | + Сложение/вычитание с числом выполняется как сложение/вычитание каждого элемента списка с данным числом; |
| 23 | +- при сложении/вычитании списков разной длины отсутствующие элементы меньшего списка считаются нулями; |
| 24 | +- после сложения/вычитания исходные списки не должны изменяться; |
| 25 | +- при сравнении (`==`, `!=`, `>`, `>=`, `<`, `<=`) экземмпляров CustomList должна сравниваться сумма элементов списков (сравнение с `list` и `int` не нужно); |
| 26 | +- должен быть переопределен `str`, чтобы выводились элементы списка и их сумма; |
| 27 | +- можно считать элементы списка `CustomList`, `list` и другие операнды всегда всегда целыми числами. |
| 28 | + |
| 29 | +### 2. Тесты CustomList в отдельном модуле |
| 30 | +Тесты должны обязательно охватывать переопределенные методы. |
| 31 | + |
| 32 | +### 3. Зеленый пайплайн в репе |
| 33 | +Обязательно: тесты, покрытие, flake8, pylint. |
| 34 | +Опционально можно добавить другие инструменты, например, mypy и black. |
| 35 | +Покрытие тестов должно составлять не менее 90%. |
0 commit comments