Когда у объекта есть сотни методов, заполнение табуляции сложно использовать. Чаще всего интересными являются те методы, которые определены или переопределены классом проверяемого объекта, а не его базовыми классами.
Как я могу заставить IPython сгруппировать его возможности завершения табуляции, чтобы на первом месте были методы и свойства, определенные в классе проверяемого объекта, а затем в базовых классах?
Похоже, что недокументированная функция inspect.classify_class_attrs(cls)
вместе с inspect.getmro(cls)
дают мне большую часть необходимой мне информации (изначально она была написана для реализации функции help(object)
Python).
По умолчанию readline отображает завершения в алфавитном порядке, но функцию, используемую для отображения завершений, можно заменить на ctypes или модуль readline, включенный в Python 2.6 и выше. Я переопределил отображение завершений readline, и он отлично работает.
Теперь все, что мне нужно, это метод объединения информации для каждого класса (от inspect.*
для выше) с информацией для каждого экземпляра, сортировки результатов по порядку разрешения метода, симпатичной печати и разбивки на страницы.
Для дополнительного кредита было бы неплохо сохранить выбранное автозаполнение и отображать наиболее популярные варианты в первый раз при следующей попытке автозаполнения на том же объекте.