<p>我正在编写一些支持代码,以加快通过RequestFactory调用Django视图(在别处声明的函数)。我将大部分测试属性直接存储在类上,而不是它们的实例上。在</p>
<p>我要做的一件事是在类中存储我感兴趣的函数,以便以后调用它(使用<strong>inspect</strong>向它提供正确的参数)。在</p>
<p>以下是我的总体意图:</p>
<pre><code>def to_test(var1, var2, var3):
"this function has nothing to do with MyTest"
assert isinstance(var1, basestring), "not an instance"
class MyTest(unittest.TestCase):
#only using this attribute to store the function to
#test, not to bind that function
func_under_test = to_test
def test_with_abc(self):
self.func_under_test("a","b", "c")
def test_with_def(self):
self.func_under_test("d","e", "f")
</code></pre>
<p>但是一旦我把一个函数赋给一个类,它就被绑定到了这个类上。在</p>
<p>99%的时候都很好。只是不在这里,因为它在调用时获取了错误的参数。相反,在每个类上,我都重新声明<em>某个</em>,这样我就可以将函数赋给它,而不是直接在类上。甚至元类也没有帮助。在</p>
<p><strong>一些示例代码</strong></p>
<p>我想要的是FunctionStore1/2的语法。实际上,我最接近的是FunctionStore3/4/6,但它们要求您记住每次复制和粘贴小的<code>_</code>声明。没什么大不了的,只是粗俗。在</p>
^{pr2}$
<p><strong>输出:</strong></p>
<pre><code>no `_` on FunctionStore5:e:name '_' is not defined
no `_` dict on FunctionStore7:e:name '_' is not defined
calling FunctionStore1
FunctionStore1: exception:unbound method regular_function() must be called with FunctionStore1 instance as first argument (got str instance instead)
calling FunctionStore2
FunctionStore2: exception:unbound method regular_function2() must be called with FunctionStore2 instance as first argument (got str instance instead)
calling FunctionStore3Works
regular_function({'args': ('FunctionStore3Works',), 'kwds': {}})
calling FunctionStore4Works
regular_function2({'args': ('FunctionStore4Works',), 'kwds': {}})
calling FunctionStore5
FunctionStore5: no func_to_check
calling FunctionStore6Works
regular_function({'args': ('FunctionStore6Works',), 'kwds': {}})
calling FunctionStore7Meta
FunctionStore7Meta: no func_to_check
even if FunctionStore7Meta does have a `_`, now:{}
</code></pre>