我正在用Sphinx記錄項目我想創建autoclass::
指令的專用版本,該指令允許我修改某些類的文檔字符串。如何在sphinx autodoc中專門記錄文檔
以下是我嘗試過的一件事:搜索獅身人面像源,我發現autoclass
指令是通過ClassDocumenter
object創建的。在此之後,我的想法是爲感興趣的類註冊一個ClassDocumenter
的子類,然後覆蓋get_doc
來修改文檔字符串。
這是我在這樣的擴展嘗試:
from six import class_types
from sphinx.ext.autodoc import ClassDocumenter
from testmodule import Foo # the class that needs modified documentation
class MyClassDocumenter(ClassDocumenter):
objtype = 'myclass'
priority = 20 # higher priority than ClassDocumenter
@classmethod
def can_document_member(cls, member, membername, isattr, parent):
return isinstance(member, class_types) and issubclass(member, Foo)
def get_doc(self, encoding=None, ignore=1):
doc = super(MyClassDocumenter, self).get_doc(encoding, ignore)
# do something to modify the output documentation
doc[0].insert(0, "ADD SOMETHING TO THE DOC")
return doc
def setup(app):
app.add_autodocumenter(MyClassDocumenter)
的問題是,當我運行此我得到一個錯誤:ERROR: Unknown directive type "py:myclass".
看來登記記錄器是不夠的,註冊的相關指示,但我在獅身人面像源中找不到任何線索來告訴我這樣的註冊是如何發生的。這不像使用標準add_directive()
方法那麼簡單,因爲我沒有明確的註冊指令。
我該如何正確完成獅身人面像中的自動文檔記錄的這種專業化?
(注:全套文件重現錯誤,請in this gist)
要修改文檔字符串,可能更容易使用'autodoc-process-docstring'事件。請參閱http://www.sphinx-doc.org/en/stable/ext/autodoc.html#event-autodoc-process-docstring。 – mzjn
謝謝@mzjn,看起來很有希望!我會試試這個方法。 – jakevdp