我有一個包裝函數,返回一個函數。有沒有辦法以編程方式設置返回的函數的文檔字符串?如果我能寫__doc__
我會做到以下幾點:如何以編程方式設置文檔字符串?
def wrapper(a):
def add_something(b):
return a + b
add_something.__doc__ = 'Adds ' + str(a) + ' to `b`'
return add_something
然後,我可以做
>>> add_three = wrapper(3)
>>> add_three.__doc__
'Adds 3 to `b`
然而,由於__doc__
是隻讀的,我不能這樣做。什麼是正確的方法?
編輯:好的,我想保持這個簡單,但當然這不是我實際上想要做的。儘管一般__doc__
在我的情況下是可寫的,但它不是。
我正在努力爲unittest
自動創建測試用例。我有一個創建一個類對象是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
如果我創建這個類和嘗試設置的testSomething
文檔字符串我得到一個錯誤:
>>> 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
你爲什麼不只需寫一個文檔字符串? – 2010-10-30 03:02:20
@RaeKettler:因爲如果你更新它,你必須記得手動更新所有其他包裝函數中的所有其他副本 – endolith 2012-07-11 16:11:42