簡體   English   中英

為什么這個多值數據結構不起作用?

[英]Why is this multi-value data structure not working?

我正在學習 Python 數據結構,並且正在查看這段代碼:

class Student:
    firstname=""
    lastname=""
    grade="U"
    list=[]


student=Student()#create the student
student.firstname=str(input("Input student first name: "))
list.append(student.firstname)
student.lastname=str(input("Input student last name: "))
list.append(student.lastname)
student.grade=str(input("Input student grade: "))
list.append(student.grade)

#print the student data
print("First Name: " + student.firstname)
print("Last Name: " + student.lastname)
print("Grade: " + student.grade)

在第一次輸入student.firstname之后,它只是說有一個錯誤( TypeError: descriptor 'append' for 'list' objects doesn't apply to a 'str' object

怎么了? 我以為代碼只會將名字添加到列表的末尾,對嗎?

名稱list指的是內置類型。 list.append是該類型的未綁定方法,與與 class Student關聯的名為list的 class 屬性無關。

如果您將適當的列表作為第一個參數傳遞,它將“起作用”(由於我不會在這里討論的原因)

list.append(student.list, student.firstname)

但是除了應該首先定義屬性的__init__方法之外,您實際上應該為 class 定義其他方法。

class Student:
    def __init__(self, firstname, lastname, grade):
        self.firstname = firstname
        self.lastname = lastname
        self.grade = "U"

x = input("Input student first name: ")
y = input("Input student last name: ")
z = input("Input student grade: ")

student = Student(x, y, z)
print("First Name: " + student.firstname)
print("Last Name: " + student.lastname)
print("Grade: " + student.grade)

無論如何,尚不清楚該列表的目的是什么。 你想保留Student的實例列表嗎? 在 class 之外執行此操作。例如,

students = []
student = Student("John", "Doe", "U")
students.append(student)

list=[]list.append(student.firstname)是一個問題: list is a type , not an appropriate object name

我建議回到基礎並實施:

  • 使用(例如) def __init__(self, first, last, grade)創建您的 class 個實例
  • __str__(self)的定義來定義如何print()你的對象
  • 定義一個list ,例如allStudents = []
  • 添加學生allStudents.append(Student(first, last, grade))

參考: https://www.w3schools.com/python/python_classes.asp

暫無
暫無

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

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