📝 Задания урока
⚡ Кратко
Выполните задания по порядку: сначала базовые, затем практические. Перед просмотром решений проверьте код на нескольких примерах.
Задание 1. Безопасная флешка
Создайте класс SecureUSB, представляющий защищённую флешку.
- При создании передаётся секретное содержимое и пароль.
- Метод
unlock(password)— возвращаетTrue, если пароль верный, и разблокирует флешку. - Метод
lock()— блокирует устройство. - Метод
read()— возвращает сохранённые данные, если устройство разблокировано, иначе выбрасываетPermissionError.
Продумайте, какие поля следует скрыть, а какие оставить доступными.
Пример вывода:
Device is locked.
Access denied.
Access granted.
Data: Secret plans
Задание 2. Данные через свойство
Доработайте класс SecureUSB:
- Переделайте метод
read()в свойствоdata, используя@property. - Теперь доступ к содержимому осуществляется через обращение к
usb.data, а не вызов метода. - При попытке чтения в заблокированном состоянии должно по-прежнему выбрасываться
PermissionError.
Пример вывода:
Device is locked. Access denied.
Access granted.
Data: Secret plans
Задание 3. Викторина: уровни доступа
Укажите верные утверждения об уровнях доступа в Python:
- a. Публичные атрибуты доступны везде.
- b. Защищённые атрибуты запрещено использовать вне класса.
- c. Приватные атрибуты создаются с одним подчёркиванием.
- d. Защищённые атрибуты могут использоваться в дочерних классах.
Выберите верные варианты ответа.
Задание 4. Найдите ошибку
Найдите ошибку в коде:
class Book:
def __init__(self, title: str) -> None:
self.__title = title
def show_title(self) -> None:
print(__title)
book = Book("1984")
book.show_title()
Объясните, почему код не работает, и исправьте его.
Проверка понимания
Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.
Вопрос 1
Что такое класс?
Вопрос 2
Что означает self?
Вопрос 3
Какой стиль имён переменных обычно рекомендует PEP 8?
Вопрос 4
Зачем использовать f-strings в современном Python?
Вопрос 5
Когда полезен ранний возврат из функции?
Вопрос 6
Что делает аннотация типа в Python?
Вопрос 7
Как лучше обрабатывать ожидаемую ошибку преобразования?