私はモジュールが@property
であるはずです。モジュールとしてクラスを設定することでこれを解決しました。私はこの答えからアイデアを得ました:Lazy module variables--can it be done?Sphinxドキュメントモジュールのプロパティ
私はこれを繰り返して使いやすく、メタクラスを作ったかったのです。これは魅力のように機能します。
問題は、ドキュメントプロパティを生成するためにSphinxを使用してもドキュメント化されないということです。他のすべては、期待どおりに文書化されています。これを修正する方法がわかりませんが、これはSphinxの問題ですか?
モジュール:
import sys
import types
class ClassAsModule(type):
def __new__(cls, name, bases, attrs):
# Make sure the name of the class is the module name.
name = attrs.pop('__module__')
# Create a class.
cls = type.__new__(cls, name, bases, attrs)
# Instantiate the class and register it.
sys.modules[name] = cls = cls(name)
# Update the dict so dir works properly
cls.__dict__.update(attrs)
class TestClass(types.ModuleType):
"""TestClass docstring."""
__metaclass__ = ClassAsModule
@property
def some_property(self):
"""Property docstring."""
pass
def meth():
"""meth doc"""
pass
、コピー&ペーストSphinxのドキュメントを表示/生成する:
sphinx-apidoc . -o doc --full
sphinx-build doc html
xdg-open html/module.html
最も本質的な部分は、クラスのプロパティを文書化することです。ボーナスは元のモジュールメンバーも文書化します。
EDIT:このクラスは、この方法で使用されるため、このようにSphinxに表示されるはずです。所望の出力の
例:
Module Foo
TestClass docstring.
some_property
Property docstring.
meth()
meth doc
EDIT 2:は、私は解決策を見つけるのを助けることができる何かを見つけました。
#: Property of foo
prop = 'test'
Sphinxのドキュメント、このような:次の内容の定期的なモジュールfoo
持つprop
はクラスの属性である場合
foo.prop = 'test'
Property of foo
を同じ作品。私はそれが私の特別な場合にはうまくいかない理由を理解していない。
コードが機能しません。 'ModMeta'は定義されていません。作業コードを投稿してください。 – jterrace
@jterraceコピー貼り付けに失敗します。今修正されました;-) – siebz0r
元のコードが '__metaclass__'の代わりに' __metaclass_'を持っていたので、私の答えを削除しました。 – jterrace