私は、属性がパブリックにアクセス可能であり、特定のインスタンス化でオーバーライドされることがある軽量クラスを作成しています。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)
これにより、最初の標準ドキュメント文字列セクションを含むクラスのドキュメント文字列と、 への拡張代入を介して各属性に追加された行が生成されます__doc__
。
このスタイルはdocstring スタイル ガイドラインで明示的に禁止されているようには見えませんが、オプションとしても言及されていません。ここでの利点は、提示可能なクラス docstring を作成しながら、定義と共に属性を文書化する方法を提供し、docstring からの情報を繰り返すコメントを記述する必要がないことです。属性を実際に 2 回書かなければならないことに、いまだにイライラしています。少なくともデフォルト値の重複を避けるために、docstring の値の文字列表現を使用することを検討しています。
これは、その場しのぎのコミュニティの慣習に対する凶悪な違反ですか? 大丈夫ですか?より良い方法はありますか?たとえば、属性の値とドキュメント文字列を含むディクショナリを作成し、その内容を__dict__
クラス宣言の末尾に向かってクラスとドキュメント文字列に追加することができます。これにより、属性名と値を 2 回入力する必要がなくなります。 edit : この最後のアイデアは、少なくともデータからクラス全体を動的に構築しない限り、実際には不可能だと思います。これは、他の理由がない限り、本当に悪い考えのように思えます。
私は python にかなり慣れていないので、コーディング スタイルの詳細をまだ調べているので、関係のない批評も大歓迎です。