调用外部函数而不发送'self'arg

时间:2013-04-16 14:14:16

标签: python

我正在为Django应用程序编写测试,并在我的测试类中使用一个属性来存储它应该测试的视图,如下所示:

# IN TESTS.PY
class OrderTests(TestCase, ShopTest):
    _VIEW = views.order

    def test_gateway_answer(self):
        url = 'whatever url'
        request = self.request_factory(url, 'GET')
        self._VIEW(request, **{'sku': order.sku})


# IN VIEWS.PY
def order(request, sku)
    ...

我的猜测是我遇到的问题是因为我正在调用OrderTests类的属性,python假设我想发送self然后order得到错误的论点。容易解决...只是不要将它用作类属性,但我想知道是否有办法告诉python在这种情况下不发送自我。

感谢。

1 个答案:

答案 0 :(得分:9)

这是因为Python函数是descriptors,所以当它们在类实例上被访问时,它们将它们的第一个(假定的self)参数绑定到实例。

您可以访问课程上的_VIEW,而不是实例:

class OrderTests(TestCase, ShopTest):
    _VIEW = views.order

    def test_gateway_answer(self):
        url = 'whatever url'
        request = self.request_factory(url, 'GET')
        OrderTests._VIEW(request, **{'sku': order.sku})

或者,您可以将其包装在staticmethod中以防止它绑定到实例:

class OrderTests(TestCase, ShopTest):
    _VIEW = staticmethod(views.order)

    def test_gateway_answer(self):
        url = 'whatever url'
        request = self.request_factory(url, 'GET')
        self._VIEW(request, **{'sku': order.sku})