2016-06-28 39 views
0

这是我的计划:如何解决:TypeError:object()不带参数?

class member: 
    name = "" 
    phone = "" 
    number = 0 


    def init(self, name, phone, number): 
     self.name = name 
     self.phone = phone 
     self.number = number 


    def setName(self, name): 
     self.name = name 


    def setPhone(self, phone): 
     self.phone = phone 


    def setNumber(self, number): 
     self.number = number 


    def getName(self): 
     return self.name 


    def getPhone(self): 
     return self.phone 


    def getNumber(self): 
     return self.number 


    def displayData(self): 
     print("") 
     print("Name:", self.name) 
     print("Phone:", self.phone) 
     print("Jersey Number:", self.number) 



def displayMenu(): 
    print("") 
    print("==========Main Menu==========") 
    print("1. Display Team Roster.") 
    print("2. Add Member.") 
    print("3. Remove Member.") 
    print("4. Edit Member.") 
    print("5. Save Data.") 
    print("6. Load Data.") 
    print("9. Exit Program.") 
    print("") 
    return int(input("Selection> ")) 

def printMembers(memberList): 
    if len(memberList) == 0: 
     print("No Current Members in Memory.") 
    else: 
     for x in memberList.keys(): 
      memberList[x].displayData() 


def addMember(memberList): 
    newName = input("Enter new member's name: ") 
    newPhone = input("Contact phone number: ") 
    newNumber = int(input("Jersey number: ")) 
    memberList[newName] = member(newName,newPhone,newNumber) 
    #An updated list is returned. 
    return memberList 


def removeMember(memberList): 
    removeName = input("Enter member name to be Removed: ") 
    #First, check to see if the name given, already exists in the list. 
    if removeName in memberList: 
     #Use the del key to delete the entry at the given name. 
     del memberList[removeName] 
    else: 
     print("Member not found in list.") 
    #An updated list is returned. 
    return memberList 


def editMember(memberList): 
    #get the name of the member to be edited. 
    oldName = input("Enter the name of the member yopu want to edit. ") 
    #See if name is already in the list, if yes, get the index of the. 
    #given name, accept the new one, and replace the name in the list. 
    #with the new name. 
    #An updated list is returned. 
    if oldName in memberList: 
     newName = input("Enter the member's new name: ") 
     newPhone = input("Contact phone number: ") 
     newNumber = int(input("Jersey number: ")) 
     memberList[oldName] = member(newName, newPhone, newNumber) 
    return memberList 

def saveData(memberList): 
    filename = input("File name to be saved: ") 
    print("Saving Data...") 
    outFile = open(filename, "wt") 
    for x in memberList.keys(): 
     name = memberList[x].getName() 
     phone = memberList[x].getPhone() 
     number = str(memberList[x].getNumber()) 
     outFile.write(name+","+phone+","+number+"\n") 
     print("Data saved.") 
     outFile.close() 

def loadData(): 
    memberList ={} 
    filename = input("Filename to Load: ") 
    inFile = open(filename, "rt") 
    print("Loading Data...") 
    while True: 
     #Read in a line of text from the text file. 
     inLine = inFile.readline() 
     #If the line is empty, stop loading data. 
     if not inLine: 
      break 
     inLine = inLine[:-1] 
     name, phone, number = inLine.split(",") 
     memberList[name] = member(name, phone, int(number)) 
    print("Data Loaded Successfully") 
    inFile.close() 
    return memberList 



print("Welcome to the Team Manager") 
#Create an empty dictionary by changing tthe [] to {} 
memberList = {} 
#Get the first menu selection from the user and store it in a control value variable. 
menuSelection = displayMenu() 


#The main program loop will detect the correct entry from the user and call the appropriate. 
#method from the user's selection. 
while menuSelection != 9: 
    if menuSelection == 1: 
     printMembers(memberList) 

    elif menuSelection == 2: 
     memberList = addMember(memberList) 

    elif menuSelection == 3: 
     memberList = removeMember(memberList) 

    elif menuSelection == 4: 
     memberList = editMember(memberList) 

    elif menuSelection == 5: 
     memberList = saveData(memberList) 

    elif menuSelection == 6: 
     memberList = loadData() 

    menuSelection = displayMenu() 
print ("Exiting Program...") 

这里是我的错误:

C:\Users\Patrick\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment.py 
Welcome to the Team Manager 

==========Main Menu========== 
1. Display Team Roster. 
2. Add Member. 
3. Remove Member. 
4. Edit Member. 
5. Save Data. 
6. Load Data. 
9. Exit Program. 

Selection> 2 
Enter new member's name: margie 
Contact phone number: 3134562252 
Jersey number: 88 
Traceback (most recent call last): 
    File "C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment.py", line 151, in <module> 
    memberList = addMember(memberList) 
    File "C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment.py", line 74, in addMember 
    memberList[newName] = member(newName,newPhone,newNumber) 
TypeError: object() takes no parameters 

Process finished with exit code 1 

有什么建议?

+0

你不给我们介绍了代码,也不要试图调试或显示您的调试尝试。最重要的是,我们不会在没有努力的情况下进行分羹或修改任务 – Li357

+0

关于python的一件很酷的事情是你并不需要编写setter和getter,你只需要编写这些代码就可以了想要控制从你的班级设置或获得什么 – Copperfield

回答

3

您将您的初始化方法命名为init;正确的名字是__init__。双下划线是Python如何指示保留给Python“特殊”使用的名称。通过不使用正确的名称,超类(object的)__init__被调用,但它没有参数,所以你得到的错误。

附注:在saveData中有另一个错误;最后的printclose调用几乎可以肯定是缩进的,所以你写的所有数据,不只是一个单一的项目。

另外:

while True: 
    #Read in a line of text from the text file. 
    inLine = inFile.readline() 
    #If the line is empty, stop loading data. 
    if not inLine: 
     break 
    inLine = inLine[:-1] 
    name, phone, number = inLine.split(",") 
    memberList[name] = member(name, phone, int(number)) 

几乎应该成为(在文件的顶部导入csv):

for name, phone, number in csv.reader(inFile): 
    memberList[name] = member(name, phone, int(number)) 

它处理的逗号换行符和拆分为你,不涉及一遍又一遍地调用.readline()的反模式(即使这不是CSV,按行迭代的正确方法是for inLine in inFile:,它避免了while,readlineif not inLine: break; for inLine in map(str.rstrip, inFile):也避免了显式切断尾部换行符的需要)。

0

您错过了__。你

def init(self, name, phone, number): 
     self.name = name 
     self.phone = phone 
     self.number = number 

必须

def __init__(self, name, phone, number): 
     self.name = name 
     self.phone = phone 
     self.number = number 
+0

谁说神不居于我们之中仅仅是凡人!!!!! –

+0

我这样做了,我的新错误:C:\ Users \ Patrick \ AppData \ Local \ Programs \ Python \ Python36-32 \ python.exe C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment.py 欢迎来到团队经理 ==========主菜单========== 1.展示团队名单。 2.添加成员。 3.删除成员。 4.编辑会员。 5.保存数据。 6.加载数据。 9.退出程序。 选择> 2 回溯(最近最后调用): 文件 “C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment.py”,线151,在 会员=使用addMember(会员) NameError:名字'addMember'不是dfnd –

+0

我的不好。回溯(最近一次通话最后): 文件“C:/Users/Patrick/PycharmProjects/Week_6_assignment.py/Week_6_assignment。PY”,线151,在 会员=使用addMember(会员) NameError:名称‘使用addMember’没有定义 过程,退出代码1 –

相关问题