✅ Ответы на вопросы
⚡ Кратко
Сначала решите задачу самостоятельно. Затем сравните ход решения, найдите отличие и повторите проблемный фрагмент без подсказки.
Вопрос 1. Сопоставьте понятия
Верный ответ: 1-b, 2-a, 3-c.
- Абстрактный класс — класс, от которого нельзя создать объект напрямую.
@abstractmethod— помечает метод, который обязательно нужно реализовать.ABC— базовый класс для создания абстрактных классов.
Вопрос 2. Docstrings
Верные ответы: a, b, d.
- a. Верно — docstring располагается сразу после объявления класса.
- b. Верно — рекомендуется перечислять атрибуты и методы.
- c. Неверно — документация методов полезна, но не обязательна.
- d. Верно — доступ через
ClassName.__doc__.
Вопрос 3. Найдите ошибку
Класс Car не реализует обязательный абстрактный метод move(). При попытке создать Car() возникнет TypeError.
class Car(Vehicle):
def move(self):
print("Driving")
def drive(self):
print("Also driving")
Вопрос 4. Итерация
Верный ответ: a.
- a. Верно —
__next__()должен выброситьStopIterationв конце. - b. Неверно — для использования в
forобъект должен быть итерируемым (обычно через__iter__).
Вопрос 5. Методы сравнения
Верный ответ: 1-a, 2-d, 3-f, 4-b, 5-c, 6-e.
Вопрос 6. __getitem__ и __setitem__
Верные ответы: a, b.
- a. Верно —
__getitem__работает и с индексами, и с ключами. - b. Верно — ключи — частный случай.
- c. Неверно — для удаления используется
__delitem__. - d. Неверно — проверку пустых значений нужно писать вручную.
Вопрос 7. Арифметические методы
Верный ответ: 1-d, 2-e, 3-c, 4-b, 5-a.
Вопрос 8. Назначение методов
Верный ответ: 1-b, 2-d, 3-a, 4-c.
Практика 1. Степень числа
class Power:
def __init__(self, exponent: int) -> None:
self.exponent = exponent
def __call__(self, x: float) -> float:
return x ** self.exponent
if __name__ == "__main__":
square = Power(2)
cube = Power(3)
print(square(4)) # 16
print(cube(2)) # 8
Практика 2. Журнал оценок
class StudentGrades:
def __init__(self) -> None:
self._data: dict[str, list[int]] = {}
def __setitem__(self, subject: str, grade: int) -> None:
self._data.setdefault(subject, []).append(grade)
def __getitem__(self, subject: str) -> list[int]:
return self._data.get(subject, [])
def __contains__(self, subject: str) -> bool:
return subject in self._data
def __len__(self) -> int:
return len(self._data)
if __name__ == "__main__":
grades = StudentGrades()
grades["Math"] = 5
grades["Math"] = 3
grades["Biology"] = 4
grades["Biology"] = 5
print("Math in grades:", "Math" in grades)
print("Total subjects:", len(grades))
print("Math:", grades["Math"])
print("Biology:", grades["Biology"])