簡體   English   中英

我該如何解決:TypeError:object()沒有參數?

[英]How do I fix: TypeError: object() takes no parameters?

這是我的程序:

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

有什么建議么?

您將初始化方法命名為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()調用.readline()的無限循環的反模式(即使這不是CSV,也可以通過for inLine in inFile:迭代的正確方法for inLine in inFile: ,它避免了whilereadlineif not inLine: breakif not inLine: breakfor inLine in map(str.rstrip, inFile):無需顯式地切掉尾隨的換行符)。

您想念__。 你的

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM