2014-07-14 78 views
0

我在我的python代碼中有一個奇怪的錯誤。我檢查了SO上的其他帖子以解決這個問題,但其他人似乎在代碼中出現了某種錯誤,我可以弄清楚。我無法識別這一個。TypeError:testing()只需要2個參數(1給出)

這是函數調用:

print "Desired Action: " , person.bestAction(indx) 

與此形成一個NPC類的人是一個對象的方法的定義。

def bestAction(self, position): 
    if self.beingPassed: 
     if self.protestCost() > self.waitCost(): 
      self.nextAction = "Protest" 
    else: 
     if self.passCost() > self.waitCost(): 
      if position != 0: 
       self.nextAction = "Pass" 

這使我有以下錯誤:

File "main.py", line 91, in stepCounter 
    if person.bestAction() == "Pass": 
TypeError: bestAction() takes exactly 2 arguments (1 given) 

我相信自己是一個隱含的參數。所以我應該只給一個參數傳遞給函數。

我很困惑,我不明白我缺少什麼。

+0

哪裏是你的類定義的休息嗎? – kindall

回答

4

self僅當函數作爲對象的方法調用時纔是隱式參數。 testing的定義未包含在class Foo(object): ...塊中,並且testing(2)不是方法調用,因此不會隱式傳遞self

+0

函數'foo()'有零參數,但'obj.foo()'有一個參數 - 對象本身,這是函數聲明中的'self'。 – TheSoundDefense

+0

謝謝,這有助於一點。但是我的實際代碼是一個類定義,我創建了一個類的對象。我提出了一個論點,但似乎並不奏效。 – Yathi

+1

@Yathi:在調用'testing'時,你真的*使用了類的對象嗎?只是寫'測試(2)'是行不通的。你必須寫'object_of_class.testing(2)'。 – jwodder

1

取決於你做什麼可以建議做到以下幾點:

class Tester(object): 
    def testing(self,someint): 
     print someint 

tester = Tester() 
tester.testing(2) 
相關問題