Подтвердить что ты не робот

Как полезен интроспекция?

Я программировал в основном в PHP, и я пытаюсь сделать переход на python. Я умею работать с PHP, и мне никогда не нужно было использовать интроспекцию/интроспекцию, такую ​​как возможности. Какая польза от самоанализа кода, и в каких ситуациях я бы счел это незаменимым?

Вот единственный способ найти это полезным: Из примеров, которые я видел в "Dive into Python", интроспекция в основном означает, что вы можете перечислить все функции и атрибуты объекта. Мне кажется, что интроспекция просто существует как "руководство пользователя" к объекту. Он позволяет просматривать объект и его функциональность из оболочки python.

Я просто не понимаю, почему или в какой ситуации вы возьмете произвольный объект, насмотритесь на него и сделайте что-нибудь полезное.

4b9b3361

Ответ 1

Предположим, что вам предоставлен пользовательский объект, и вы хотите узнать, есть ли у объекта определенные атрибуты или как определенный метод, то для его обнаружения можно использовать функцию интроспекции, такую ​​как hasattr.

Также, как и в книге DiveintoPython, можно предположить, что вы создаете редактор графического интерфейса с функцией автозаполнения, вы хотите получить общедоступные методы объекта, которые можно вызывать во время выполнения, тогда вы можете использовать методы интроспекции например getattr для каждого метода, полученного через dir, и проверьте, есть ли он callable, а затем отобразите его в списке автозавершения.

Ответ 2

Один пример, когда я использовал интроспекцию в реальном проекте:

У нас была служба, которая управляла фоновыми задачами под названием TaskService. Каждая задача была фактически реализована как класс, реализующий методы Start() Stop() для данного интерфейса. У нас был файл конфигурации, в котором мы сопоставляли каждую задачу со своим классом. Поэтому при запуске TaskService он просто просматривал конфигурационный файл, и для каждой задачи ему потребовалось имя класса и подстегнуло его (во время выполнения) через reflection (интроспекция является подчастию отражения).

Еще один пример того, где интроспекция может быть полезна, заключается в использовании аннотаций на вашем языке программирования. Аннотации используются для предоставления метаинформации о ваших классах другим сторонним программам (например, ORM), например, вы можете использовать аннотации, чтобы определить, является ли класс сущностным классом (это так в Java, я не знаю о Python извините), или о типе ассоциации определенных атрибутов и т.д.

Завершение кода - еще один пример полезности интроспекции.

И, кстати, как вы отметили, самоанализ помогает много программировать инструменты документации.

Ответ 3

Я написал средство проверки документации, которое запускает тесты в файлах PDF для проверки различных проблем с ними. Тесты - это методы специальных классов, которые представляют ветки Subversion, продукты, руководства и произвольные группировки различных типов. Механизм проверки подлинности использует интроспекцию для поиска этих специальных классов, создания экземпляров и запуска их методов.

Я мог бы написать валидатор, чтобы вы могли написать шаблонный код, чтобы создать экземпляр каждого класса, вызвать каждый метод и т.д. Но это повторяется и оно подвержено проблемам технического обслуживания (невозможность обновить оба места при добавлении/удалении тесты, в этом случае). Воспользовавшись тем фактом, что вы хотите применить одну и ту же операцию ко всем специальным классам, компьютер может по существу сделать для вас шаблонный материал, и он не допустит ошибок. Таким образом, вы должны объявить структуру документации только в одном месте.