Tengo una función de envoltura que devuelve una función. ¿Hay alguna manera de establecer programáticamente la docstring de la función devuelta? Si pudiera escribir en __doc__
yo haría lo siguiente:¿Cómo configuro programáticamente la docstring?
def wrapper(a):
def add_something(b):
return a + b
add_something.__doc__ = 'Adds ' + str(a) + ' to `b`'
return add_something
Entonces podría hacer
>>> add_three = wrapper(3)
>>> add_three.__doc__
'Adds 3 to `b`
Sin embargo, desde __doc__
es de sólo lectura, no puedo hacer eso. ¿Cuál es la forma correcta?
Editar: Ok, quería mantener esto simple, pero por supuesto esto no es lo que en realidad estoy tratando de hacer. Aunque en general __doc__
es grabable en mi caso, no es así.
Estoy tratando de crear cajas de prueba para unittest
automáticamente. Tengo una función de contenedor que crea un objeto de la clase que es una subclase 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 creo esta clase y tratar de establecer la cadena de documentación de testSomething
Me aparece un error:
>>> 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
¿Por qué no solo escribe un docstring? –
@RaeKettler: Porque si lo actualizas, siempre debes recordar actualizar manualmente todas las otras copias en todas las otras funciones del contenedor – endolith