2017-10-20 4 views
0

初めてメタクラスを使用しました。 目的は、クラスまたはインスタンスのhelp()出力を制御することでした。 メタクラスの__dir __()関数で属性を指定すると、ヘルプの内容を制御することができました。 しかし、Intellisense/code_completionの場合、Jupyter内では、クラス自体の__dir __()関数が重要であることがわかりました。クラスとメタクラスの__dir __()

私は事実を理解するだけで十分です。 しかし、その理由を知りたいと思います。

ご清聴ありがとうございます。

+0

ヘルプコンテンツ? __dir__は 'dir()'の実装であり、オブジェクトの属性dictを出力する必要があります – Vinny

+0

はい、Jupyterのhelp()は\ __ dir __()を使ってヘルプの内容を決めるようです。これがジュピター特有のものであるのか、それとももっと一般的な理由があるのか​​分かりません。それにもかかわらず、クラスまたはメタクラスの\ __ dir __()がいつ、そしていつ、なぜ使用されますか? –

答えて

0

other answer about this topicで述べたように、Pythonはhelpの内容をどのように選んだのかを定義していません。 metaclass__dir__を使用すると、言語の性質上問題なく動作しますが、サードパーティのモジュールでは、一般的なことではないため、クラスのディレクトリとは異なるカスタム結果が返されることはありません。

あなたがカスタマイズできない機能をカスタマイズしようとしているのは、未知のユーザーメソッドに代わってプロキシする新しいクラスを作成する必要があるため、ヘルプから隠して、あなたの具体的な指示とそれらの指示だけを表示するためにジュピターのノートブックに頼るのではなく、あなたが必要とするものだけを表示するか、またはアプリケーション全体を作成してください。

全体的に、他の動機にメタクラスを使用していても、出力先をhelpに上書きしようとするだけのメタクラスを使用しているのであれば、間違っていると思います。

別の方法として、クラスに手動で呼び出し可能な "help2"メソッドをスティックし、目的の出力のみを出力することもできます。その後、メインクラスdocstringに文書化してください。 "classname.help2()を使用してください。"、それ以外の場合は__dir__のままにしてください。

+0

この説明をお寄せいただきありがとうございます。コードを文書化するのは初めてのことです!私はdocstringの考えが好きですが、私はそれらを使用すると少し失望しています。私の目的は、私のものをたくさんの無駄なものと混ぜないようにすることでした。 –

+0

私は、あなたがスフィンクスを見て、適切に書式化されたドキュメントストリングを利用して、すべてのプロジェクトのファーストクラスのオフライン(すなわち「役に立たない」)ドキュメントを生成する方法についても触れたと​​思います。あなたは本当にそこに行かなければなりません。 https://thomas-cokelaer.info/tutorials/sphinx/docstring_python.html – jsbueno

関連する問題