Inherit docstrings in Python class inheritanceについて質問がありますが、その答えはメソッドdocstringsを処理します。親クラスdocstringを__doc__属性として継承する
私の質問は、親クラスのドキュメントストリングを__doc__
属性として継承する方法です。ユースケースは、Django rest frameworkが、ビュークラスのdocstringsに基づいてAPIのhtml版で素敵なドキュメントを生成するということです。しかし、docstringのないクラスの基本クラス(docstring付き)を継承すると、APIはdocstringを表示しません。
それは非常によく、スフィンクスや他のツールは、正しいことを行うと私のためのドキュメント文字列の継承を扱うが、残りのフレームワークは、(空の).__doc__
属性を見てDjangoのことかもしれません。
class ParentWithDocstring(object):
"""Parent docstring"""
pass
class SubClassWithoutDoctring(ParentWithDocstring):
pass
parent = ParentWithDocstring()
print parent.__doc__ # Prints "Parent docstring".
subclass = SubClassWithoutDoctring()
print subclass.__doc__ # Prints "None"
私はsuper(SubClassWithoutDocstring, self).__doc__
のようなものを試してみたが、それはまた、私だけNone
を得ました。あなたは(少なくともCPythonとの)クラスに新しい__doc__
ドキュメンテーション文字列を割り当てることはできませんので、あなたはメタクラスを使用する必要があります
私は、これについてPythonに関する議論について思い出しています。 Pythonはdocstringがもはや意味を持つかどうかを知ることができないので、docstringはデフォルトで継承されません(継承は、プログラマが通常のOOPと完全に一致していないことを意味します。オブジェクト)の場合、ドキュメントが空白だったケースが間違っているとは考えられませんでした。例えば、親クラスがABCの場合はもっと複雑になります。 –
3.3では、 '__doc__' getset_descriptor'はヒープ型のために書き込み可能になりました。それが定義される前に 'getter'が定義されていました。現在は 'setter' [' type_set_doc'](http://hg.python.org/cpython/file/bd8afb90ebf2/Objects/typeobject.c#l632)があります。 'check_set_special_type_attr'は' __doc__'の削除を防ぎます。 – eryksun
@eryksun:確認済み。それは長い間延期されていた修正です! Python 3.3のオリジナルのクラスデコレータのアイデアを復活させました。 –