Son yıllarda ben birkaç çeşidini yazdım autodoc-skip-member
ben yöntemler gibi istedi çünkü çeşitli ilgisiz Python projeler için geri aramaları __init__()
, __enter__()
ve __exit__()
sonuçta, bu "özel yöntemler" API parçası ve ne daha iyi bir yer vardır (benim API belgelerinde göstermek onları özel yöntemin docstringinden daha belgeleyin).
Son zamanlarda en iyi uygulamayı aldım ve Python projelerimden birinin bir parçası yaptım ( işte belgeler ). Uygulama temelde şuna iner:
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
Evet, mantıktan daha fazla belge var :-). Bunun autodoc-skip-member
gibi bir geri aramayı tanımlamanın special-members
seçeneğin kullanımına göre (benim için) avantajı , seçeneğin gürültü olduğunu düşündüğüm ve hiç kullanışlı olmadığını düşündüğüm (tüm yeni stil sınıflarında mevcut olan AFAIK) special-members
gibi özelliklerin dokümantasyonunu da etkinleştirmesidir __weakref__
. Geri çağırma yaklaşımı bunu önler (çünkü yalnızca işlevler / yöntemler üzerinde çalışır ve diğer öznitelikleri göz ardı eder).
"both" Both the class’ and the __init__ method’s docstring are concatenated and inserted.
-> Bu nedenle,__init__(self)
eğer varsa, sadece sınıf dokümanı değil , aynı zamanda sınıf dokümanı da olmalıdır. Bir test senaryosu sağlayabilir misiniz, çünkü öyleyse, hata gibi hissediyor, değil mi?