简体   繁体   中英

Python docstring repeated param text

In a Python module (which is designed to be used in IPython Notebooks by less-technical users), I have several functions in the way of:

load_this(dt, this_filter)
load_that(dt, that_filter)
load_the_other(dt, the_other_filter)

The docstring for the dt param is the same for each function:

:param dt: date, date tuple, or datetime tuple. 
    date type args expand to start and end of day.
    eg.  date(2015, 9, 9) or
    (date(2015, 9, 9), date(2015, 9, 10)) or
    (datetime(2015, 9, 9, 12, 30), datetime(2015, 9, 9, 1))

However the docsring for x_filter params are different in each case.

I try to be as DRY as I can in my code, so the repeated docstring is grating a little. Is there any way to cross reference a docstring param in the code, but still have IPython display the full docstring.

Thanks

You can add docs to functions via decorator

def mydoc(func):
    func.__doc__ = 'Here I am.'
    return func

@mydoc
def load_this(dt):
    pass

Variant with custom docs

def setdoc(docstring):
    def decor(func):
        func.__doc__ = docstring
        return func
    return decor

@setdoc('Here I am.')
def load_this(dt):
    pass

or just add docs after defining a function

docmessage = 'Here I am.'
def load_this(dt):
    pass
load_this.__doc__ = docmessage

Instead of programmatically generating the docstring (rather unpythonic in my opinion), what stops you from just define a function load like

def load(dt, filter_):
    ... ...

and write a single documentation for it? I really fail to see the need for 3 separate functions.

Even if you some how do, you can always create them, after defining the above function load , by partial ing them.


Edit: After the comment by OP, I think you can simply write the doc for dt once in one of the functions (presumably the most basic, "prototype" one) and in other function simply say

"See the documentation of ___ for details about dt".

Yes, you can splice docstrings smartly like

some_function.__doc__ = some_function.__doc__ + "doc for dt"

or more smartly than that by writing your own documentation-generating metaclass generator factor factory framework, but why? ;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM