Один пример, где я использовал самоанализ на реальном проекте:
У нас был сервис, управляющий фоновыми задачами, который называется TaskService
. Каждая задача была фактически реализована как класс, реализующий методы Start () Stop () данного интерфейса. У нас был файл конфигурации, в котором мы сопоставляли каждую задачу с ее классом. Поэтому при запуске TaskService он просто просматривал файл конфигурации, и для каждой задачи он брал имя класса и создавал его экземпляр (во время выполнения) через отражение (самоанализ является частью отражения).
Другой пример того, где интроспекция может быть полезна, - использование аннотаций на вашем языке программирования. Аннотации используются для предоставления метаинформации о ваших классах другим сторонним программам (например, ORM), например, вы можете использовать аннотации, чтобы сказать, является ли класс сущностным классом (это имеет место в Java, я не знаю о Python, извините ) или о типе ассоциации определенных атрибутов и т. д.
Завершение кода является еще одним примером полезности самоанализа.
И, кстати, как вы упомянули, интроспекция очень помогает инструментам программной документации.