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

标签 python

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

# 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 不要发送 self。

谢谢。

最佳答案

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

您可以在类上访问 _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 中防止它被绑定(bind)到实例:

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})

关于python - 调用外部函数而不发送 'self' arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16039459/

相关文章:

python - 在 Django 中通过哈希有效地保存文件

python - 在计算重复项时,如何在 Python 中确定一个列表是否是另一个列表的子列表

python - 在 Pandas 中使用任意优先级进行聚合

python - *args 和 **kwargs 的使用

python - 如何使用 django 创建 SSL 安全连接

python - App Engine 批量数据上传 - 身份验证错误

python - 如何在 PowerPoint 中使用 Python Seaborn 可视化?

python - 计算其中一个引用的三个项目的最快方法(使用 python)?

python - pandas read_html 函数 colspan=2

python - 权重文件用于不同尺寸的图像