Alcune altre opzioni. In Ipython con pylab abilitato, dedent è già nello spazio dei nomi. Ho controllato ed è da matplotlib. Oppure può essere importato con:
from matplotlib.cbook import dedent
Nella documentazione afferma che è più veloce di quello equivalente a textwrap e nei miei test su ipython è in effetti 3 volte più veloce in media con i miei test rapidi. Ha anche il vantaggio di scartare eventuali righe vuote iniziali, questo ti consente di essere flessibile nel modo in cui costruisci la stringa:
"""
line 1 of string
line 2 of string
"""
"""\
line 1 of string
line 2 of string
"""
"""line 1 of string
line 2 of string
"""
L'uso del dedotto matplotlib su questi tre esempi darà lo stesso risultato sensato. La funzione di deduzione dell'involucro di testo avrà una riga vuota iniziale con il primo esempio.
Lo svantaggio evidente è che textwrap è nella libreria standard mentre matplotlib è un modulo esterno.
Alcuni compromessi qui ... le funzioni di deduzione rendono il tuo codice più leggibile dove vengono definite le stringhe, ma richiedono l'elaborazione in seguito per ottenere la stringa in formato utilizzabile. Nei docstring è ovvio che è necessario utilizzare il rientro corretto poiché la maggior parte degli usi del docstring eseguirà l'elaborazione richiesta.
Quando ho bisogno di una stringa non lunga nel mio codice trovo il seguente codice certamente brutto in cui lascio cadere la stringa lunga dall'indentazione racchiusa. Sicuramente fallisce su "Bello è meglio che brutto", ma si potrebbe sostenere che è più semplice ed esplicito dell'alternativa dedotta.
def example():
long_string = '''\
Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip.\
'''
return long_string
print example()