При изучении фрагмента неизвестного кода Python, я иногда врезаться в шаблонПростые способы, чтобы исследовать неизвестный Python API,
varName.methodName()
.
Чтобы понять, что это, я изучу код больше, найду, где было создано экземпляр varName, найти его тип. Так что, если имяПерем оказывается экземпляр ClassName класса, я бы знал, что имяМетода() является методом ИмяКласса.
Иногда имяПрает == собственных и имяМетода() является методом этого класса, или метод, унаследованным от некоторых другого класса, если текущий класс подклассов некоторых других классов.
Быстрые способы/инструменты, которые могут принимать «methodName» в качестве входных данных, сканировать все установленные модули Python и показывать классы, которые имеют methodName()?
Ближайшая вещь, связанная с этим, я знаю, это ipython. Если я наберу имя класса, то dot ('.'), Затем TAB, он может отображать члены класса. Вместо класса я мог бы использовать имя объекта (который является экземпляром определенного класса), и он тоже будет работать. Как только я выберем имя метода из предоставленных параметров, я могу набрать '?' или '??' и получить некоторую помощь, если есть docstring.
Интересно, может ли ipython выполнить интеллектуальное сканирование, основанное только на строке 'methodName'.
Если вы знаете альтернативы ipython, которые могли бы помочь с этим, пожалуйста, предложите их.
Редактировать: по запросу я явно добавляю, что мне хотелось бы найти методы по именам методов не только в файлах исходного кода Python. Некоторые пакеты Python (в особенности PyQt) содержат много .so-файлов, и ipython может выполнять доработки, предположительно импортируя их в первую очередь. Таким образом, обычный текстовый поиск, такой как grep (или даже ctags), не будет делать трюк здесь.
Какой редактор вы используете? Хорошее решение может быть специфичным для редактора. – Brandon
@Brandon Corfman: vim/scite –
Является ли 'grep' сломанным? Каталоги библиотеки Python полностью доступны. –