2015-11-30 124 views
0

因此,我只是學習如何在一個調用中集成兩個類,並且我一直在print語句中得到錯誤:TypeError:'str'對象不可調用。我是否需要創建一個str構造函數?或者我需要將兩個班級整合爲一個班級?TypeError:'str'object is not callable ... in OOP

class Election: 

    def __init__(self, place, ballot): 
     self.place=place 
     self.ballot=ballot 

    def place(self): 
     return self.place 

    def getBallot(self): 
     return self.ballot 

    def getContest(self,number): 
     if self.ballot[number]: 
      return self.ballot[number] 
     else: 
      return False 

    def size(self): 
     return len(self.ballot) 

    def addContest(self,Contest): 
     self.ballot=self.ballot.append(Contest) 
     return self.ballot.get(Contest) 

class Contest: 

    def __init__(self, position, cands): 
     self.position = position 
     self.cands = {"Jones":0,"Smith":0} 

    def getPosition(self): 
     return str(self.position) 

    def getCandidates(self): 
     return str(self.cands) 

    def getTally(self,candidate): 
     return self.cands[candidate] 

    def addTally(self,candidate,n_votes): 
     self.cands[candidate]=self.cands[candidate]+n_votes 
def main(): 
    elect = Election('TestTown', [ 
     Contest('Senator', ['Jones', 'Smith']), 
     Contest('Mayor', ['Anderson', 'Green'])]) 

    print(elect.place()) 
    elect.getContest(1)# --> <Election object at 0x7f4b359cf5d0> 
    elect.getContest(1).getTally('Anderson')# --> 0 

main() 

回答

1

錯誤告訴你到底是什麼問題:elect.place是一個字符串,而你試圖通過增加()調用它。 elect.place是字符串'TestTown'。簡單地稱之爲正常。別叫它。這不是一個函數或其他可調用函數。

print(elect.place) 

而且你可以擺脫吸氣劑, def placedef getBallotdef getPosition等等。實例變量已經可以直接訪問。

0

的問題是這兩行代碼:

def place(self): 
    return self.place 

看,現在你Election對象有self.place爲一個字符串,作爲一個功能。在這種情況下,似乎是字符串映射該函數的情況。要解決此問題,請遵循與其他班級功能相同的約定,並命名功能getPlace

相關問題