5

I'm using the cmd module. there's a command that I'd like to document like this:

def do_this(self,arg)
    "this command accepts these values {values}".format(values="legal values")

the reasoning being I'd like to type that list of legal values only once. I found I can change the docstring later, but I think that's a hack. Is there a way to do this?

kdubs
  • 1,596
  • 1
  • 21
  • 36

2 Answers2

9

Changing the docstring afterwards (by assigning to do_this.__doc__) is the only way.

Or if you want it to look nicer, you can use a decorator - but it still assigns to do_this.__doc__.

def doc(docstring):
    def document(func):
        func.__doc__ = docstring
        return func

    return document

@doc("this command accepts these values: {values}".format(values=[1, 2, 3])
def do_this(self, arg):
    pass
1

As you have this values in variable, you can reference to it in doc:

# mymodule.py
legal_values = {'one', 'two', 'three'}

def do_this(self,arg)
    """this command accepts these values: see `mymodule.legal_values`"""
Mikhail Gerasimov
  • 36,989
  • 16
  • 116
  • 159
  • 1
    tried this. didn't seem to work. those are backticks around legal_values? – kdubs Mar 18 '16 at 18:29
  • @kdubs they work if you make a HTML document of the module contents using Sphinx, similar to the Python docs. In there there'd be a hyperlink. It wouldn't work specially in the online `help` though. – Antti Haapala -- Слава Україні Mar 18 '16 at 18:32
  • 1
    @kdubs it doesn't insert values into docstring, but it's information for user, where to find this values. When I'll type `help(do_this)` or will see `do_this` in source, i'll understand i should see `help(mymodule.legal_values)` for this values. – Mikhail Gerasimov Mar 18 '16 at 18:39
  • 1
    ah. ok. I think the other answer is what I want then. it shows up in the help with cmd – kdubs Mar 18 '16 at 18:44