[解決済み] Pythonでクラス属性を文書化するには?
質問
私は、その属性が一般にアクセス可能で、特定のインスタンスで時々上書きされることを意図した軽量なクラスを書いています。 Python 言語には、クラスの属性、またはそれに関してはどのような種類の属性でも、docstring を作成するための規定はありません。 これらの属性を文書化するために、期待され、サポートされる方法は何でしょうか? 現在、私はこのようなことを行っています。
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
"""
flight_speed = 691
__doc__ += """
flight_speed (691)
The maximum speed that such a bird can attain.
"""
nesting_grounds = "Raymond Luxury-Yacht"
__doc__ += """
nesting_grounds ("Raymond Luxury-Yacht")
The locale where these birds congregate to reproduce.
"""
def __init__(self, **keyargs):
"""Initialize the Albatross from the keyword arguments."""
self.__dict__.update(keyargs)
この結果、クラスの docstring は、最初の標準的な docstring セクションと、各属性のために拡張された代入によって追加された行を含む
__doc__
.
ではこのスタイルは明示的に禁止されているわけではないようですが docstring スタイル・ガイドライン では明示的に禁止されているわけではありませんが、選択肢として言及されているわけでもありません。 この方法の利点は、属性をその定義と一緒に文書化する方法を提供する一方で、見やすいクラスのdocstringを作成し、docstringからの情報を繰り返すコメントを書く必要がないことです。 私は、少なくともデフォルト値の重複を避けるために、docstringの値の文字列表現を使用することを検討しています。
これはアドホックなコミュニティの規約に対する極悪非道な違反でしょうか? 大丈夫でしょうか。 もっと良い方法はないでしょうか。 たとえば、属性の値と docstring を含む辞書を作成し、その内容をクラス
__dict__
と docstring をクラス宣言の最後に追加することができます。こうすることで、属性名と値を二度入力する必要性を軽減できます。
編集
少なくとも、データからクラス全体を動的に構築することなしには不可能だと思います。
私はpythonにかなり新しく、コーディングスタイルの詳細をまだ解明していないので、関係のない批評も歓迎します。
どのように解決するのですか?
混乱を避けるために: 用語 プロパティ には 特定の意味 を意味します。 あなたが言っているのは、私たちが呼ぶところの クラス属性 . これらの属性は常にそのクラスを通して操作されるので、クラスのdoc文字列の中でそれらを文書化することは理にかなっていると私は思います。 このようなものです。
class Albatross(object):
"""A bird with a flight speed exceeding that of an unladen swallow.
Attributes:
flight_speed The maximum speed that such a bird can attain.
nesting_grounds The locale where these birds congregate to reproduce.
"""
flight_speed = 691
nesting_grounds = "Throatwarbler Man Grove"
あなたの例のアプローチよりも、ずっと目に優しいと思います。 もし私が本当に属性値のコピーをdoc文字列に表示させたいのであれば、各属性の説明の横か下に配置するでしょう。
Pythonでは、doc文字列は単にソースコードの注釈ではなく、ドキュメント化されたオブジェクトの実際のメンバーであることに留意してください。クラス属性変数はオブジェクトそのものではなく、オブジェクトへの参照であるため、彼ら自身のdoc文字列を保持する方法がないのです。おそらく、quot;何が実際にここにあるかquot;の代わりに、quot;何がここに入るべきかquot;を記述するために、参照にdocストリングのケースを作ることができると思いますが、私はそれを含むクラスのdoc文字列で十分に簡単に行うことができると思います。
関連
-
Python カメの描画コマンドとその例
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
Python jiabaライブラリの使用方法について説明
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?