Ich habe eine Wrapper-Funktion, die eine Funktion zurückgibt. Gibt es eine Möglichkeit, den Docstring der zurückgegebenen Funktion programmgesteuert festzulegen? Wenn ich __doc__
schreiben könnte würde ich folgendes tun:Wie programmiere ich den Docstring programmatisch?
def wrapper(a):
def add_something(b):
return a + b
add_something.__doc__ = 'Adds ' + str(a) + ' to `b`'
return add_something
Dann konnte ich jedoch
>>> add_three = wrapper(3)
>>> add_three.__doc__
'Adds 3 to `b`
tun, da __doc__
schreibgeschützt ist, kann ich das nicht tun. Was ist der richtige Weg?
Edit: Ok, ich wollte das einfach halten, aber das ist natürlich nicht das, was ich eigentlich versuche. Auch wenn im Allgemeinen __doc__
in meinem Fall beschreibbar ist, ist es nicht.
Ich versuche, Testfälle für unittest
automatisch zu erstellen. Ich habe eine Wrapper-Funktion, die ein Objekt der Klasse erstellt, die eine Unterklasse von unittest.TestCase
ist:
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
Wenn ich diese Klasse erstellen und versuchen, das docstring von testSomething
ich einen Fehler zu setzen:
>>> 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
Warum gehst du nicht schreibe einfach einen Docstring? –
@RaeKettler: Weil Sie dann, wenn Sie es aktualisieren, immer daran denken müssen, alle anderen Kopien in allen anderen Wrapper-Funktionen manuell zu aktualisieren – endolith