📋 Формулировка задания
Исходное задание из LMS:
-
Счётчик экземпляров. Создайте класс
User, представляющий пользователя. При создании должны указываться логин (username) и пароль (password). У класса должно быть полеtotal_users, хранящее общее количество созданных пользователей. При каждом создании нового объектаUserсчётчик должен увеличиваться. Добавьте методget_total(), возвращающий количество пользователей. Проверьте, что счётчик работает. -
Проверка данных пользователя. Доработайте класс
User. Добавьте валидации полей при создании. Имя должно быть непустой строкой. Пароль должен быть строкой длиной не менее 5 символов. Если данные некорректны — выбрасывайтеValueError. Добавьте строковое представление объекта. Проверьте работу класса с разными значениями.
🔧 Шаг 0. Подготовка окружения
Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.
.gitignore, единая история, легко переключаться между уроками.
Создайте (или откройте) рабочую папку
В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.
# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
Инициализируйте 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: базовая структура репозитория"
Создайте папку для текущего урока
mkdir -p lesson-68
cd lesson-68
Создайте виртуальное окружение (venv)
# Windows
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
После активации в начале строки терминала появится (venv).
Создайте ветку для задания
cd ..
git checkout -b lesson/68-attributes
# Если настроен удалённый репозиторий:
git push -u origin lesson/68-attributes
🛠️ Шаги выполнения задания
Создайте файл user.py
В папке lesson-68 создайте файл user.py.
Реализуйте класс User
Добавьте классовый атрибут total_users, инициализацию с валидацией, классовый метод get_total и метод __str__.
Проверьте работу
Создайте несколько объектов, выведите счётчик и попробуйте передать некорректный пароль.
✅ Полное решение
Ниже приведено полное решение задания. Совет: попробуйте выполнить самостоятельно, прежде чем смотреть ответ.
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'
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите файл:
python lesson-68/user.py. - Убедитесь, что в терминале нет ошибок и вывод совпадает с ожидаемым.
- Попробуйте изменить данные в конце файла и убедитесь, что валидация срабатывает.
🐛 Отладка в VS Code
Если что-то не работает:
- Поставьте точку останова (breakpoint) в
__init__. - Нажмите F5 или выберите «Run → Start Debugging».
- В панели Debug посмотрите значения
self.username,self.passwordиUser.total_users. - Проверьте 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__должен возвращать строку, а не печатать её.