J'ai une fonction wrapper qui retourne une fonction. Existe-t-il un moyen de définir par programme la docstring de la fonction renvoyée? Si je pouvais écrire __doc__
je ferais ce qui suit:Comment est-ce que je programme la docstring par programme?
def wrapper(a):
def add_something(b):
return a + b
add_something.__doc__ = 'Adds ' + str(a) + ' to `b`'
return add_something
alors que je pouvais faire
>>> add_three = wrapper(3)
>>> add_three.__doc__
'Adds 3 to `b`
Cependant, comme __doc__
est en lecture seule, je ne peux pas le faire. Quelle est la bonne façon? 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 ne l'est pas.
J'essaie de créer des bancs d'essai pour unittest
automatiquement. J'ai une fonction d'emballage qui crée un objet de classe qui 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 je crée cette classe et essayer de régler le docstring de testSomething
je reçois 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 il suffit d'écrire une docstring? –
@RaeKettler: Parce que si vous le mettez à jour, vous devez toujours vous rappeler de mettre à jour manuellement toutes les autres copies dans toutes les autres fonctions d'encapsulation – endolith