2014-05-15 84 views
1

我有以下python代碼(有點簡化,但它確實犯了同樣的錯誤)。將類方法傳遞給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()) 

我得到以下類型錯誤:

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

回答

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. 

傳遞另一個類的實例可能不是你想要做的,但它只是一個例子。

希望這會有所幫助!

+0

你是完全正確的,這個作品!我只需要使用test.add,完美!再次感謝 – FotisK

+0

@ user3458191如果這個答案對您有幫助,請在接受按鈕上勾選,在投票按鈕下方:D – aIKid

+0

還有一個問題,如果我想通過test.add(持續時間= 5)傳遞一個參數會怎樣?儘快我這樣做,我得到了相同TypeError ...但我不想/需要返回任何東西從添加!然後通過兩個參數 – FotisK

相關問題