Sphinx HTML documentation for generic Python classes (i.e. parametric types) does not show the initialization arguments.
Desired output: class GenericClass(value: T)
Actual output: class GenericClass(*args, **kwargs)
Python source code (class_test.py)
from typing import Generic, TypeVar
#:TypeVar("T"): Type variable serving as a parameter for generic types.
T = TypeVar("T")
class GenericClass(Generic[T]):
"""A class that accepts a generic type parameter.
Attributes:
value: A value of generic type ``T``.
"""
def __init__(self, value: T):
self.value: T = value
class RegularClass:
"""A regular class that is explicitly typed.
Attributes:
value: A string value.
"""
def __init__(self, value: str):
self.value: str = value
Sphinx Output
conf.py
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
# -- Project information -----------------------------------------------------
project = 'sphinx-autodoc-generic-class-bug'
copyright = '2020, Christopher Peisert'
author = 'Christopher Peisert'
# The short X.Y.Z version.
version = "0.0.1"
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
]
# autodoc options
autodoc_typehints = 'signature'
autodoc_default_options = {
'autoclass_content': 'class',
'member-order': 'bysource',
'members': True,
'show-inheritance': True,
}
# Napoleon settings
napoleon_google_docstring = True
napoleon_use_admonition_for_examples = False
napoleon_use_admonition_for_notes = False
napoleon_use_admonition_for_references = False
napoleon_use_param = False # Show the Parameter Types in separate line.
napoleon_use_rtype = True # Show the Return Type in separate line.
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
source_suffix = ['.rst']
# The master toctree document.
master_doc = 'index'
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'classic'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
class_test.rst
=========================
Generic vs. Regular Class
=========================
.. automodule:: src.class_test
:exclude-members: T
.. autodata:: T
:annotation: = TypeVar("T")