03.27 Стиль программирования, комментарии и строки документации

  1. Про стиль оформления в частности, и вообще дисциплину программирования
    • (повторение) Зачем нужно
    • Соблюдение дисциплины оформления VS переформатирование

      • Недостаток переформатирования — несоответствие с личными привычками (особенно в случае «тяжёлых» форматтеров типа yapf и black)

      • Альтернатива — autopep8, исправление только PEP8-несовместимостей

  2. Установка и использование flake8

    • {OK} Настройка .flake8 (в частности, длины строк)

    • {i} Пользуясь документацией разрешить from math import * и последующее использование sin()

  3. {OK} Установка и использование pydocstyle

    • {i} Найти документацию и настроить config так, чтобы pydocstyle не ругался на отсутствие точки в конце и вот это своё «First line should be in imperative mood» не писал

  4. Про пакеты (введение)
    • Пакет — это каталог с .py-файлом (вложенные каталоги — подпакеты вида пакет.подпакет)

      • {OK} Если в нём есть __init__.py, он выполняется при import-е

        • (есть ещё костыли для import *, но подождут до лекции)

      • {OK} Если в нём есть __main__.py, он выполняется при python3 -m пакет

      • {OK} Если нужно импортировать из «соседнего» подпакета:

        • from . import сосед

        • from .сосед import символ_соседа

        • from .. import сосед этажом ниже

        • … и т. д.
    • {i} создать пакет basepkg с двумя подпакетами: main, lib (пакеты — это подкаталоги)

      • В lib содержится единственная функция output(), полностью совпадающая с print()

      • Подпакет main можно запускать с помощью python3 -m base.main, и он выводит собственную строку документации при помощи lib.output().

        • Подсказка: __doc__

Д/З

Пример репозитория, соответствующего требованиям

  1. <!> Задача_1: MUD messaging

    • Скопируйте решение Задачи_1 с предыдущего занятия. Сделайте коммит. Работайте на ветке work.

    • Задайтесь вопросом: если MUD теперь многопользовательский, как пользователи (приключенцы) будут кооперироваться, чтобы вынести особо крутого монстра?
      • Спойлер: нужен чат
    • Реализуйте команду для передачи сообщения всем игрокам
      • Синтаксис: sayall <строка>, где <строка> - либо одно слово (без пробельных символов), либо строка в кавычках

      • Примеры:
        • sayall PREVED

        • sayall "Let's attack dragon at 5 9"

      • Сервер транслирует строку всем с указанием имени пользователя-источника. Пример: kobold702: Let's attack dragon at 5 9

  2. <!> Задача_2: MUDуляризация, применение flake8 и pydocstyle

    • Скопируйте решение Задачи_1. Сделайте коммит. Работайте на ветке work.

    • Оформите MUD в виде двух пакетов: клиент (moodclient), сервер (moodserver)

      • В силу cowsay-ориентированности, наш MUD обрёл официальное название - MOOD
    • Запуск для пакета — в __main__.py

    • Добейтесь полного отсутствия претензий со стороны flake8 и pydocstyle к содержимому пакетов

      • Разрешается настраивать ☺

LecturesCMC/PythonDevelopment2023/Prac/07_Style (последним исправлял пользователь FrBrGeorge 2023-03-27 15:51:49)