Pydoc/help()継承されたクラスの方法と属性のドキュメントを非表示にできますか?
-
27-09-2019 - |
質問
特定のクラスから継承するクラスを宣言するとき:
class C(dict):
added_attribute = 0
クラスのドキュメント C
のすべての方法をリストします dict
(どちらか help(C)
また pydoc
).
自動的に生成されたドキュメントから継承されたメソッドを隠す方法はありますか(ドキュメント文字列は、非書かれていない方法については、基本クラスを参照できます)?それとも不可能ですか?
これは便利です: pydoc
モジュールで定義されている関数をリストします 後 そのクラス。したがって、クラスに非常に長いドキュメントがある場合、モジュールによって提供される新しい機能が表示される前に、多くの有用な情報が印刷されます。文書化されているモジュールに固有の何かに到達するまで)。
解決
pydoc
そしてその help
Builtinはこれをサポートしていませんが、あなたが望む行動を持つような独自のツール(おそらくPydocのソースを変更することで)を書くことができない理由はありません。歩くだけです dict ローカルに定義された属性を取得するためのクラスの、次に持っているものを探す doc 属性として。
他のヒント
私は同じ問題を抱えており、Pydoc.pyに3行を追加することにより、Windows(x86)のPython 2.7.6で解決しました。指示:
- lib pydoc.pyの独自のコピーを作成します
のすべての発生を見つける
inherited
変数 (3回、私のカウントで)ファイルと 空のリストに設定します 定義された直後。たとえば、私は809行を得ました:attrs、継承= _split_list(attrs、lambda t:t [2]はこのクラスです)
そして書いた inherited = []
その下の新しい行。
今では、継承された方法をもう印刷していません。
特別な方法でクラスAメタクラスを与えることができます __dir__
それは独自の属性リストを返します。 Pydocはこのリストを使用します。
ノート:
- これは、の動作にも影響します
dir()
. - まれに、メタクラスの使用は、地獄の次元にポータルを開くことが知られています。