私は、その属性がパブリックにアクセスできるように意図され、特定のインスタンス化で時々オーバーライドされるだけの軽量クラスを書いています。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からの情報を繰り返すコメントを書く必要を回避することです。実際に属性を2回記述しなければならないのは、いらいらしています。少なくともデフォルト値の重複を避けるために、docstringの値の文字列表現を使用することを検討しています。
これはアドホックコミュニティの慣習の重大な違反ですか?大丈夫ですか?もっと良い方法はありますか?たとえば、属性の値とdocstringを含むディクショナリを作成し、その内容をクラスに追加して__dict__
、クラス宣言の最後の方にdocstring を追加することができます。これにより、属性の名前と値を2回入力する必要がなくなります。 編集:この最後のアイデアは、実際には不可能であると私は思います。少なくとも、データからクラス全体を動的に構築することなしにはそうではありません。
私はPythonにかなり慣れていないので、コーディングスタイルの詳細を検討しています。したがって、無関係な批評も歓迎します。