将类方法传递给python中的类方法的问题

时间:2014-05-15 03:05:14

标签: python class methods

我有以下python代码(有点简化,但确实产生了相同的错误)。

class traffic(object):
    def __init__(self, testObj):
        try:
            <do something>
        except AssertionError:
            sys.exit (1)
    def add(self, phase='TEST'):
        <do something>
    def check(self, phase='TEST'):
        <do something>

class testcase(object):
    def __init__(self):
        try:
            <do something>
        except AssertionError:
            sys.exit (1)
    def addSeqPost(self, cmdObj):
        print "add Seq. for POST"
        cmdObj(phase='POST')

tc = testcase()
test = traffic(tc)
tc.addSeqPost(test.add())

我得到以下TypeError:

Traceback (most recent call last):
  File "test.py", line 25, in <module>
    tc.addSeqPost(test.add())
  File "test.py", line 20, in addSeqPost
    cmdObj(phase='POST')
TypeError: 'NoneType' object is not callable

如果我将代码更改为,它可以正常工作,但这不是我想要的:

    def addSeqPost(self, cmdObj):
        print "add Seq. for POST"
        cmdObj.add(phase='POST')

tc.addSeqPost(test())

我想使它更通用,因为test()可以有更多方法,我想传递给tc.addSeqPost(),如tc.addSeqPost(test.check())。

谢谢你。为你的时间和帮助

在alKid的帮助下。

还有一个问题,如果我想用test.check(duration = 5)传递一个参数怎么办?一旦我这样做,我得到了相同的TypeError ...但我不想/需要从添加!!!返回任何东西

示例:

    ...
    def check(self, phase='TEST', duration=0):
        <do something>

tc = testcase()
test = traffic(tc)
tc.addSeqPost(test.add)
tc.addSeqPost(test.check(duration=5))

1 个答案:

答案 0 :(得分:0)

test.add()不会返回该函数,它会运行该函数并返回返回的值。由于add没有返回任何内容,因此传递的对象为None

tc = testcase()
test = traffic(tc)
tc.addSeqPost(test.add)

另外,请记住test.add需要两个参数。 selfphase。你需要传递它们。

def addSeqPost(self, cmdObj):
    print "add Seq. for POST"
    cmdObj(self, phase='POST') #pass an instance of `testcase` to the function.

传递另一个班级的实例可能不是你想要做的,但它只是一个例子。

希望这有帮助!