這段代碼是一個簡單的學生管理系統,我希望它接收來自用戶的輸入并根據呼叫顯示。我創建了一個學生類并初始化了變數。我創建了一個方法accept(self)用于接收用戶輸入并將詳細資訊附加到字典串列中。但我堅持如何初始化我收到的輸入。由于無法為 Student 類創建物件,如何呼叫 Student 類之外的方法?我是 Python 的初學者。很難理解 OOP。請幫我!這是我寫的代碼:
class Student:
student_details = []
def __init__(self, name, rollno, mark1, mark2):
self.name = name
self.rollno = rollno
self.mark1 = mark1
self.mark2 = mark2
def accept(self):
no_of_entries = int(input("Enter the number of entries: "))
i = 1
while i <= no_of_entries:
print(f"Student {i}")
name = input("Name: ")
rollno = int(input("Roll: "))
mark1 = int(input("Mark 1: "))
mark2 = int(input("Mark 2: "))
Student(name, rollno, mark1, mark2).student_details.append({
"Name": self.name,
"Rollno": self.rollno,
"Mark1": self.mark1,
"Mark2": self.mark2,
})
print()
i = 1
print(Student.student_details)
student1 = Student()
proceed = True
while proceed:
print("STUDENT MANAGEMENT SYSTEM".center(50, '-'))
print()
print("* Accept Student entries (1): ")
print("* Search Student entries (2): ")
print("* Update Student entries (3): ")
print("* Delete Student entries (4): ")
print("* Display Student entries (5): ")
choice = int(input("Enter your choice: "))
if choice == 1:
我得到錯誤:
Student.__init__() missing 4 required positional arguments: 'name', 'rollno', 'mark1', and 'mark2'
我不知道該怎么辦。即使這是我在 Python 中使用 OOP 時面臨的問題。如果有人可以幫助我,我將不勝感激
uj5u.com熱心網友回復:
編輯:回呼來自 student1 = Student() 洗掉陳述句并將接受方法宣告為靜態方法。然后,您可以在該方法中指定一個學生并申請該學生。
你的錯誤應該在這里:
Student(name, rollno, mark1, mark2).student_details.append({
"Name": self.name,
"Rollno": self.rollno,
"Mark1": self.mark1,
"Mark2": self.mark2,
})
您嘗試初始化一個物件,然后嘗試將其用作字典。
st1 = Student(name, rollno, mark1, mark2)
Student.student_details.append(st1)
您也可以在物件中使用類屬性,但更改只會出現在物件中。它不會在所有物件中。
最好讓該方法在函式中接受,否則您最終會得到許多具有相同值的物件。如果您想將其保留為一種方法,您可以將代碼更改為:
Student.student_details.append(self)
uj5u.com熱心網友回復:
默認情況下,Python 類中定義的方法是實體方法,因此需要在已經存在的物件實體上呼叫它們。如果要創建自定義建構式,該方法可能應該使用@classmethod裝飾器標記為類方法,以便可以在類本身上呼叫它。
class Student:
student_details = []
def __init__(self, name, rollno, mark1, mark2):
self.name = name
self.rollno = rollno
self.mark1 = mark1
self.mark2 = mark2
@classmethod
def accept(cls):
no_of_entries = int(input("Enter the number of entries: "))
for i in range(no_of_entries):
print(f"Student {i}")
name = input("Name: ")
rollno = int(input("Roll: "))
mark1 = int(input("Mark 1: "))
mark2 = int(input("Mark 2: "))
student = cls(name, rollno, mark1, mark2)
cls.student_details.append(student)
print(cls.student_details)
Student.accept()
uj5u.com熱心網友回復:
student1 = Student()
你需要在這里傳遞4個引數
def __init__(self, name, rollno, mark1, mark2):
所以你應該有
student1 = Student('name', 'rollno', 'mark1', 'mark2')
或者其他的東西
uj5u.com熱心網友回復:
當您呼叫該類時,您忘記了輸入引數。例如:
student1 = Student(name='a', rollno='0', mark1='1', mark2='2')
我不確定你的目標是什么。如果您只是想將學生資訊輸入到串列中,也許下面的代碼可以給您一個想法。
class Student:
student_details = []
def __init__(self, name, rollno, mark1, mark2):
self.name = name
self.rollno = rollno
self.mark1 = mark1
self.mark2 = mark2
student_list = []
print("STUDENT MANAGEMENT SYSTEM".center(50, '-'))
print()
print("* Accept Student entries (1): ")
print("* Search Student entries (2): ")
print("* Update Student entries (3): ")
print("* Delete Student entries (4): ")
print("* Display Student entries (5): ")
choice = int(input("Enter your choice: "))
if choice == 1:
print("You have selected (1) - Accept Student entries")
no_of_entries = int(input("Enter the number of entries: "))
for i in range(0, no_of_entries):
print("Input student no", i 1, "information.")
student = Student(name=input("Name: "), rollno=input("Roll: "), mark1=input("Mark 1: "), mark2=input("Mark 2: "))
student_list.append(student)
elif choice == 2:
pass
elif choice == 3:
pass
elif choice == 4:
pass
elif choice == 5:
pass
else:
print("Invalid choice.")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488765.html
