オブジェクトに数百のメソッドがある場合、タブ補完は使いにくいです。多くの場合、興味深いメソッドは、基本クラスではなく、検査対象のオブジェクトのクラスによって定義またはオーバーライドされるメソッドです。
IPythonにタブ補完の可能性をグループ化して、検査対象のオブジェクトのクラスで定義されたメソッドとプロパティが最初に来て、次に基本クラスのメソッドとプロパティが続くようにするにはどうすればよいですか?
文書化されていないinspect.classify_class_attrs(cls)
関数とinspect.getmro(cls)
、必要な情報のほとんどが提供されているようです(これらは、もともとPythonのhelp(object)
機能を実装するために作成されたものです)。
デフォルトでは、readlineは補完をアルファベット順に表示しますが、補完を表示するために使用される関数は、ctypesまたはPython2.6以降に含まれるreadlineモジュールに置き換えることができます。readlineの完了表示を上書きしましたが、うまく機能します。
今必要なのは、クラスごとの情報(inspect.*
上記から)をインスタンスごとの情報とマージし、メソッドの解決順序で結果を並べ替え、きれいに印刷してページ分割するメソッドです。
追加のクレジットとして、選択したオートコンプリートを保存し、次に同じオブジェクトでオートコンプリートが試行されたときに最も人気のある選択肢を最初に表示すると便利です。