TypeError:必须使用XX实例调用未绑定方法make_request(),但如何?

时间:2012-11-17 16:48:19

标签: python

运行下面的代码我得到

E TypeError:必须使用A实例作为第一个参数调用未绑定方法make_request()(改为使用str实例)

我不想将make_request方法设置为静态,我想从对象的实例中调用它。

示例http://pytest.org/latest/fixture.html#fixture-function

# content of ./test_smtpsimple.py
import pytest

@pytest.fixture
def smtp():
    import smtplib
    return smtplib.SMTP("merlinux.eu")

def test_ehlo(smtp):
    response, msg = smtp.ehlo()
    assert response == 250
    assert "merlinux" in msg
    assert 0 # for demo purposes

我的代码

""" """
import pytest


class  A(object):
    """  """
    def __init__(self, name ):
        """ """
        self._prop1 = [name]


    @property
    def prop1(self):
        return self._prop1  

    @prop1.setter
    def prop1(self, arguments):
        self._prop1 = arguments

    def make_request(self, sex):
        return 'result'

    def __call__(self):
        return self


@pytest.fixture()
def myfixture():
    """ """
    A('BigDave')
    return A

def test_validateA(myfixture):
    result = myfixture.make_request('male')
    assert result =='result'

2 个答案:

答案 0 :(得分:0)

@ pytest.fixture()创建fixture对象的实例

@ pytest.fixture直接访问fixture类。

@pytest.fixture
def myfixture():
    """ """
    A('BigDave')
    return A

VS

@pytest.fixture
def myfixture():
    """ """

    return  A('BigDave')

答案 1 :(得分:0)

您可以尝试将最后两种方法替换为: -

@pytest.fixture()
def myfixture():
    """ """
    return A('BigDave')

def test_validateA(myfixture):
    result = myfixture().make_request('male')
    assert result =='result'

myfixture是函数对象。要调用该功能,您需要一个括号。所以,myfixture()

现在在myfixture()方法中,return A再次返回类对象。要返回您将在其上调用方法的A级instance,您需要返回A()或只返回您在那里使用的A('BigDave')

因此,现在您的test_validateA方法将从A方法获取类myfixture的实例,您正在调用该方法,因此首先传递self参数。