【发布时间】:2011-05-02 16:50:21
【问题描述】:
我有一个返回函数的包装函数。有没有办法以编程方式设置返回函数的文档字符串?如果我可以写信给__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
【问题讨论】:
-
你为什么不写一个文档字符串?
-
@RaeKettler:因为如果你更新它,你必须始终记住手动更新所有其他包装函数中的所有其他副本