2012-03-16 10 views
6

pythonのdocstringはリテラル文字列として指定する必要があります。しかし、いくつかの関数(例えば、異なるコンストラクタ)に似たドキュメントストリングを持たせることや、複数のアクセスメソッドが同じ引数リストを受け入れて(同じ隠しメソッドに依存する)便利なこともあるので、同じ説明はどこにでもあります。そのような場合は、__doc__に割り当てることによってドキュメントストリングを構築することができます。単純なデコレータで行います。システムはとてもうまく動作します(Python 2で)、私はそれがどのようにシンプルで明確でカプセル化されているかに満足しています。デコレータでpythonのドキュメントストリングを変更する:良いアイデアですか?

質問:これは良い考えですか?特に、この設定で混乱するツールがあるかどうか(例えば、バイトコードではなくソースからドキュメントストリングを抽出するもの)。ソリューションはまだPython 3で動作する予定ですか?これを避けるためには他の理由や状況がありますか?

+0

「異なるコンストラクタ」?私はあなたが何らかの種類のファクトリ関数を意味すると仮定します。なぜなら、あなたは '__init__'を1つだけ持つことができるからです。 –

+0

「工場機能」が正しいとは思わない。私は同じクラスのインスタンスを作成するクラスの静的メンバーを参照していました。彼らはすべてそれを直接サポートする言語で多形のコンストラクタになります。しかし、はい、ファクトリ関数は別のユースケースかもしれません。 – alexis

+0

私はそれらを一種の工場と考えています。静的メンバ関数と空き関数(C++の用語を使用する)との間には、名前空間以外の違いはありません。 Pythonには、「クラスメソッド」と「静的メソッド」という概念があります。 –

答えて

4

3.

それは、ソースコードの可読性のつまりを傷つけていない場合はそれは大丈夫です、あなたはまだ機能が何をするかを知ることができ、どのように使用するためには、どのツールを壊すべきではありませんし、それは、Pythonで動作するはずですそれ。

問題は、デザインが貧弱なためです。複数のメソッドが同じ引数リストを使用している場合、反復的なdocstringを生成することによってパッチを適用するのではなく、コードをリファクタリングする必要があります(リストで動作するオブジェクトを作成する)。

+0

ありがとう!聞いてよかったです。私はデザインが大丈夫だと思います:メソッドはすべて同じ実装メソッドを呼び出し、異なるフォーマットで(オブジェクトのコンテンツから)検索結果を返すようなことを行います。異なる操作のためにインターフェイスに異なる名前を付けるのはいいことです。とにかく、標準化された名前を持つ既存のAPIがあります。 docstringについては、ソースコードを読むときに実装方法を見るだけで十分です。ただし、インタラクティブヘルプについては、インタフェースメソッドを文書化する必要があります。 – alexis

+0

これについてさらにフィードバックをいただきたいので、質問を再開しました。犯罪は意図されていません! – alexis

関連する問題