🏠 Домашнее задание

⚡ Суть задания

Создать класс User с классовым счётчиком пользователей и валидацией данных при создании. Проверить, что счётчик работает, а некорректные данные вызывают ValueError.

Результат: файл user.py, который можно запустить и увидеть ожидаемый вывод.

📋 Формулировка задания

Исходное задание из LMS:

  1. Счётчик экземпляров. Создайте класс User, представляющий пользователя. При создании должны указываться логин (username) и пароль (password). У класса должно быть поле total_users, хранящее общее количество созданных пользователей. При каждом создании нового объекта User счётчик должен увеличиваться. Добавьте метод get_total(), возвращающий количество пользователей. Проверьте, что счётчик работает.
  2. Проверка данных пользователя. Доработайте класс User. Добавьте валидации полей при создании. Имя должно быть непустой строкой. Пароль должен быть строкой длиной не менее 5 символов. Если данные некорректны — выбрасывайте ValueError. Добавьте строковое представление объекта. Проверьте работу класса с разными значениями.

🔧 Шаг 0. Подготовка окружения

Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.

📁 Структура репозитория: мы используем один репозиторий для всех практических работ курса. Это удобнее, чем десятки отдельных репозиториев: общий .gitignore, единая история, легко переключаться между уроками.
1

Создайте (или откройте) рабочую папку

В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.

# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
2

Инициализируйте Git-репозиторий (один раз)

git init

echo "# Python Fundamentals — Практические работы" > README.md
echo "venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".env" >> .gitignore

git add README.md .gitignore
git commit -m "init: базовая структура репозитория"
3

Создайте папку для текущего урока

mkdir -p lesson-68
cd lesson-68
4

Создайте виртуальное окружение (venv)

# Windows
python -m venv venv
venv\Scripts\activate

# Mac / Linux
python3 -m venv venv
source venv/bin/activate

После активации в начале строки терминала появится (venv).

5

Создайте ветку для задания

cd ..
git checkout -b lesson/68-attributes

# Если настроен удалённый репозиторий:
git push -u origin lesson/68-attributes

🛠️ Шаги выполнения задания

1

Создайте файл user.py

В папке lesson-68 создайте файл user.py.

2

Реализуйте класс User

Добавьте классовый атрибут total_users, инициализацию с валидацией, классовый метод get_total и метод __str__.

3

Проверьте работу

Создайте несколько объектов, выведите счётчик и попробуйте передать некорректный пароль.

✅ Полное решение

Ниже приведено полное решение задания. Совет: попробуйте выполнить самостоятельно, прежде чем смотреть ответ.

class User:
    total_users: int = 0  # атрибут класса — общий счётчик

    def __init__(self, username: str, password: str) -> None:
        # Валидация логина
        if not isinstance(username, str) or not username:
            raise ValueError("Invalid username")

        # Валидация пароля
        if not isinstance(password, str) or len(password) < 5:
            raise ValueError(f"Invalid password: {password!r}")

        self.username = username
        self.password = password
        User.total_users += 1

    @classmethod
    def get_total(cls) -> int:
        return cls.total_users

    def __str__(self) -> str:
        return f"User: {self.username}"


# Проверка счётчика
user1 = User("alice", "secret")
user2 = User("bob", "qwerty")
print(user1)
print(user2)
print("Total users:", User.get_total())

# Проверка валидации
try:
    User("carol", "qwe")
except ValueError as error:
    print(f"ValueError: {error}")

Ожидаемый вывод:

User: alice
User: bob
Total users: 2
ValueError: Invalid password: 'qwe'

🧪 Как проверить решение

  1. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  2. Запустите файл: python lesson-68/user.py.
  3. Убедитесь, что в терминале нет ошибок и вывод совпадает с ожидаемым.
  4. Попробуйте изменить данные в конце файла и убедитесь, что валидация срабатывает.

🐛 Отладка в VS Code

Если что-то не работает:

  1. Поставьте точку останова (breakpoint) в __init__.
  2. Нажмите F5 или выберите «Run → Start Debugging».
  3. В панели Debug посмотрите значения self.username, self.password и User.total_users.
  4. Проверьте Terminal на наличие traceback — Python показывает номер строки с ошибкой.

💾 Сохранение работы

git add lesson-68/
git commit -m "lesson-68: class and instance attributes, User counter and validation"
git push

💡 Советы и типичные ошибки

  • Убедитесь, что venv активирован перед запуском.
  • Не коммитьте папку venv/ — она указана в .gitignore.
  • Счётчик должен увеличиваться только при успешном создании объекта. Если валидация выбросила исключение, счётчик не должен меняться.
  • __str__ должен возвращать строку, а не печатать её.
Проверить по документации: аннотации типов в примере выходят за рамки исходного задания. Подробнее см. typing и PEP 484.