Hey!
There is a new feature that I would like to discuss for docrep and I'd very much like your feedback (pinging @jgostick, @mennthor, @amnona, @lesteve). It's about docstring inheritance (i.e. the docrep.DocstringProcessor inserts parameters based on the base class).
Wouldn't it be nice to have something like
class A:
def my_method(self, a=1):
"""Do something awesome
Parameters
----------
a: int
A number
Returns
-------
int
The changed number
""""
return a + 1
@docstrings.resolve_inheritance
class B:
@docstrings.inherit_parameters
@docstring.inherit_returns
def my_method(self, a=1):
"""Do something better"""
return a + 2
and then have B.my_method the same docstring as A.my_method? inherit_parameters and inherit_returns would mark the method to be processed then in resolve_inheritance (Note: this separate treatment is necessary as, during class compilation, B is not yet defined and we therefore cannot resolve that B inherits A within inherit_parameters).
I'd like to discuss with you, how this should be set up (besides the implementation discussed above). Here are some ideas that I have and I highly appreciate your feedback and suggestions 😃
Specifying the base class
We could extend this by optionally specifying the base class, e.g. via
def funca(a=1):
""""Do something
Parameters
----------
a: int
The input
""""
return a+ 1
@docstrings.resolve_inheritance
@docstrings.inherit_parameters(funca)
def funcb(a=1):
"""Do something else"""
return a + 2
This would then make it available for functions as well.
Replace arguments
We could also replace arguments in the sub class method (see alsp #16), e.g.
def funca(a=1, b=2):
""""Do something
Parameters
----------
a: int
The input (Default 1)
b: int
Another input (Default 2).
""""
return a+ b
@docstrings.resolve_inheritance
@docstrings.inherit_parameters(funca)
def funcb(a=3, b=2):
"""Do something else
Parameters
----------
a: int
The input (Default 3)"""
return a + 2
Specify parameters
I would in general use inspect.getfullargspec and match the parameters of the function with the parameters of base. But it should also have the possibility to specify them manually, e.g. to resolve stuff like *args, **kwargs. Here is an example
@docstrings.resolve_inheritance
@docstrings.inherit_parameters(funca, params=['a'])
def funcb(*args):
"""Do something else
Parameters
----------
b: int
The input (Default 3)"""
pass
funcb in this case should have used the docstring of parameter a although it is not in the argspec of funcb.
Hey!
There is a new feature that I would like to discuss for docrep and I'd very much like your feedback (pinging @jgostick, @mennthor, @amnona, @lesteve). It's about docstring inheritance (i.e. the
docrep.DocstringProcessorinserts parameters based on the base class).Wouldn't it be nice to have something like
and then have
B.my_methodthe same docstring asA.my_method?inherit_parametersandinherit_returnswould mark the method to be processed then inresolve_inheritance(Note: this separate treatment is necessary as, during class compilation,Bis not yet defined and we therefore cannot resolve thatBinheritsAwithininherit_parameters).I'd like to discuss with you, how this should be set up (besides the implementation discussed above). Here are some ideas that I have and I highly appreciate your feedback and suggestions 😃
Specifying the base class
We could extend this by optionally specifying the
baseclass, e.g. viaThis would then make it available for functions as well.
Replace arguments
We could also replace arguments in the sub class method (see alsp #16), e.g.
Specify parameters
I would in general use
inspect.getfullargspecand match the parameters of the function with the parameters ofbase. But it should also have the possibility to specify them manually, e.g. to resolve stuff like*args, **kwargs. Here is an examplefuncbin this case should have used the docstring of parameteraalthough it is not in the argspec offuncb.