Trong những năm qua, tôi đã viết một số biến thể của lệnh autodoc-skip-member
gọi lại cho các dự án Python không liên quan khác nhau vì tôi muốn các phương thức như __init__()
, __enter__()
và__exit__()
để hiển thị trong tài liệu API của tôi (sau khi tất cả, những "phương pháp đặc biệt" là một phần của API và những gì nơi tốt hơn để ghi lại chúng hơn bên trong docstring của phương thức đặc biệt).
Gần đây, tôi đã thực hiện tốt nhất và biến nó thành một trong những dự án Python của tôi ( đây là tài liệu ). Việc triển khai về cơ bản là:
import types
def setup(app):
"""Enable Sphinx customizations."""
enable_special_methods(app)
def enable_special_methods(app):
"""
Enable documenting "special methods" using the autodoc_ extension.
:param app: The Sphinx application object.
This function connects the :func:`special_methods_callback()` function to
``autodoc-skip-member`` events.
.. _autodoc: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
"""
app.connect('autodoc-skip-member', special_methods_callback)
def special_methods_callback(app, what, name, obj, skip, options):
"""
Enable documenting "special methods" using the autodoc_ extension.
Refer to :func:`enable_special_methods()` to enable the use of this
function (you probably don't want to call
:func:`special_methods_callback()` directly).
This function implements a callback for ``autodoc-skip-member`` events to
include documented "special methods" (method names with two leading and two
trailing underscores) in your documentation. The result is similar to the
use of the ``special-members`` flag with one big difference: Special
methods are included but other types of members are ignored. This means
that attributes like ``__weakref__`` will always be ignored (this was my
main annoyance with the ``special-members`` flag).
The parameters expected by this function are those defined for Sphinx event
callback functions (i.e. I'm not going to document them here :-).
"""
if getattr(obj, '__doc__', None) and isinstance(obj, (types.FunctionType, types.MethodType)):
return False
else:
return skip
Có, có nhiều tài liệu hơn logic :-). Ưu điểm của việc xác định một lệnh autodoc-skip-member
gọi lại như thế này so với việc sử dụng special-members
tùy chọn (đối với tôi) là special-members
tùy chọn này cũng cho phép tạo tài liệu về các thuộc tính như __weakref__
(có sẵn trên tất cả các lớp kiểu mới, AFAIK) mà tôi cho là nhiễu và không hữu ích chút nào. Phương pháp gọi lại tránh điều này (vì nó chỉ hoạt động trên các hàm / phương thức và bỏ qua các thuộc tính khác).
"both" Both the class’ and the __init__ method’s docstring are concatenated and inserted.
-> Vì vậy, nó không chỉ là__init__(self)
mà còn là docstring của lớp nếu bạn có. Bạn có thể cung cấp một trường hợp kiểm tra vì nếu nó là như vậy, nó giống như một lỗi, phải không?