2013-12-08 55 views
0

我遇到了獲取我需要的輸出的問題。我使用一個模塊(稱爲q3.py)與3定義的類:學生,模塊和註冊和執行它與下面的細節另一個文件:TypeError:str只需要2個參數錯誤

#testq3.py 
from q3 import * 

james = Student('james') 
alice = Student('alice') 
mary = Student('mary') 

agm = Module('agm') 
ipp = Module('ipp') 

r = Registrations() 
r.add(james,agm) 
r.add(alice,agm) 
r.add(alice,ipp) 

mstr = '' 
for m in map(str,r.modules(alice)): 
    mstr = mstr+' '+m 
print(alice, 'is doing the following modules:', mstr) 
sstr = '' 
for s in map(str,r.students(agm)): 
    sstr = sstr+' '+s 
print(agm, 'has the following students:', sstr) 

print(r) 

然後這裏是我的q3.py文件.. 。

class Student:  
    'Class to define student details' 
    def __init__(self, name): 
     self.name = name 
    def __str__(self, name): 
     return (self.name) 
    def __iter__(self, name): 
     return iter(self.name) 

class Module:  
    'Class to define module codes' 
    def __init__(self, modules): 
     self.modules = modules  
    def __str__(self, modules): 
     return self.modules 
    def __iter__(self, modules): 
     return iter(self.modules) 


class Registrations(): 
    'Class telling us what modules students are taking' 
    def __init__(self): 
     self.reglist = [] 
    def add(self, students, modules): 
     self.reglist.append((students, modules)) 
    def students(self, modules): 
     for x in self.reglist: 
      if x[1] == modules: 
       print x[0] 
    def modules(self, students): 
     for y in self.reglist: 
      if y[0] == students: 
       print y[1] 

我不斷收到錯誤,如:

Traceback (most recent call last): 
    for m in map(str,r.modules(alice)): 
File ".....", line 37, in modules 
    print y[1] 
TypeError: __str__() takes exactly 2 arguments (1 given) 

所以我在STR加入,也ITER,因爲我不斷收到參數2迭代錯誤。我哪裏錯了?我只是希望輸出與testq3.py底部的相同。請幫忙??我很確定我有很多str/iter錯誤,但是我一定還有其他的東西,因爲我沒有得到任何接近我想要的輸出的東西,儘管玩了很多年。任何幫助,將不勝感激!

+0

您應該刪除您的編輯,詢問第二個問題,然後在另一個問題中提出第二個問題。就目前來看,你的編輯問題,你的標題是沒有意義的,答案是沒有意義的。這樣做被認爲是不好的形式......只是問第二個問題。 – SethMMorton

+0

對不起,我是新人,不知道,我會記住未來。 – user3078840

回答

1

您的__str__方法需要額外的參數,但在打印對象時Python不會傳遞該參數。

例如:

def __str__(self, modules): 
    return self.modules 

你需要確保所有__str__方法有def __str__(self):作爲簽名。例如:

def __str__(self): 
    return self.modules 
+0

啊你有什麼建議我應該改變它? – user3078840

+0

@ user3078840我已經更新了上面的答案。 –

1

__str____iter__方法正在不必要modules/name參數。 Python不會從str函數中傳遞這個函數,並且你沒有使用它,所以只需從這些方法的參數列表中刪除它。

相關問題