Я поддерживаю программу Python и изо всех сил пытаюсь понять отношения между различными классами. Я думаю, что было бы полезно видеть схему того, как классы взаимодействуют.
Какие опции там доступны, который мог бы позволить мне делать это?
Просто мои 2 цента.
Инструменты Case, такие как Enterprise Architect, могут генерировать диаграммы классов из кода python, однако для целей понимания я предпочитаю грубо моделировать классы и отношения вручную.
Я тоже использую UML, когда хочу понять новый код, получить грубый обзор взаимодействия между классами и представление о наследственности.
Большинство IDE имеют средства для изучения кода, но я считаю, что небольшие связные диаграммы UML легче усваиваются и запоминаются.
Я также нахожу, что модели доменов легче понять, когда они представлены на диаграмме классов.
gaphor имеет возможность импортировать модуль python и генерировать диаграммы классов uml, в любом случае это не так хорошо.
В любом случае инструменты анализа кода на Python работают не очень хорошо, поскольку никто не может «предсказать», какие аргументы будут переданы (или возвращены) функциями и так далее. Большинство из них «угадывает» пройденный тип.
Надеемся, что Python 3 с «аннотацией функции» сможет решить такую «проблему»
Отличный вопрос! В зависимости от того, насколько вы практичны, вы можете рассмотреть возможность использования модуля трассировки при выполнении кода.
python -m trace -T yourprogram.py
Выдаст вам информацию о том, кто звонил. Это можно либо проанализировать, либо написать код, который программно использует трассировку для извлечения графа вызовов.
Как только это будет сделано, немного взлома dot, и у вас есть диаграмма. Как только вы это сделаете, это сделает классный пост в блоге о том, что вы сделали и как это сработало.
Если это Django, вы также можете использовать
./manage.py graph_models
, если используете расширения команд Django
Проверьте epydoc . Обычно его считают генератором документации, но посмотрите на (автоматически сгенерированный) график в этом примере:
http://epydoc.sourceforge.net/api/epydoc.apidoc.RoutineDoc-class.html