Comment puis-je définir par programmation la docstring?

J'ai un wrapper fonction qui retourne une fonction. Est-il un moyen de définir par programmation la docstring de retour de la fonction? Si je pouvais écrire à __doc__ je ferais le suivant:

def wrapper(a):
    def add_something(b):
       return a + b
    add_something.__doc__ = 'Adds ' + str(a) + ' to `b`'
    return add_something

Ensuite, j'ai pu faire

>>> add_three = wrapper(3)
>>> add_three.__doc__
'Adds 3 to `b`

Cependant, depuis __doc__ est en lecture seule, je ne peux pas le faire. Quelle est la façon correcte?


Edit: Ok, je voulais garder cela simple, mais bien sûr, ce n'est pas ce que je suis en train d'essayer de faire. Même si, en général, __doc__ est inscriptible dans mon cas, il n'est pas.

Je suis en train de créer des cas de tests pour unittest automatiquement. J'ai une fonction wrapper qui crée un objet de classe est une sous-classe de unittest.TestCase:

import unittest
def makeTestCase(filename, my_func):
    class ATest(unittest.TestCase):
        def testSomething(self):
            # Running test in here with data in filename and function my_func
            data  = loadmat(filename)
            result = my_func(data)
            self.assertTrue(result > 0)

    return ATest

Si j'ai créer cette classe et d'essayer de régler la docstring de testSomething j'obtiens une erreur:

>>> def my_func(): pass
>>> MyTest = makeTestCase('some_filename', my_func)
>>> MyTest.testSomething.__doc__ = 'This should be my docstring'
AttributeError: attribute '__doc__' of 'instancemethod' objects is not writable
  • Pourquoi ne pas simplement écrire une docstring?
  • Parce qu'alors, si vous le mettez à jour, vous devez toujours vous rappeler de mettre à jour manuellement tous les autres exemplaires dans toutes les autres fonctions wrapper
InformationsquelleAutor oceanhug | 2010-10-30