2013-12-08 7 views
0

У меня проблема с получением нужного вам результата. Я использую модуль (так называемый q3.py) с 3-х определенными классами: студент, модулем и регистрациями и реализацией его в другой файл со следующими деталями:TypeError: str принимает ровно 2 аргумента error

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

Поэтому я добавил в ул, а также 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, и вы ее не используете, поэтому просто удалите ее из списка аргументов этих методов.

Смежные вопросы