我想從 Class 實體中列印資料。我嘗試在 str 函式中包含資料,但這僅在值為默認值(空串列)時才有效。將資料添加到串列后,我只能列印記憶體物件。誰能幫我解決為什么會這樣?我希望能夠列印出用于除錯的物件。
class Student():
def __init__(self,name,year):
self.name=name
self.year=year
self.grades=[]
def add_grade(self, grade):
if type(grade)==Grade:
self.grades.append(grade)
else:
pass
def __str__(self):
return str(self.grades)
pieter=Student("Pieter Bruegel the Elder", 8)
print(pieter)
[] # Returns empty list of grades as it was initiated.
class Grade():
minimum_passing=65
def __init__(self,score):
self.score=score
def is_passing(self):
if self.score >= self.minimum_passing:
return True
else:
return False
pieter.add_grade(Grade(100))
pieter.add_grade(Grade(40))
print(pieter)
[<__main__.Grade object at 0x000002B354BF16A0>, <__main__.Grade object at 0x000002B354BF13A0>]
uj5u.com熱心網友回復:
當您告訴它列印“pieter”時,您是在告訴它嘗試列印物件。您需要做的是在類中添加列印功能或使用物件中的特定變數。嘗試添加如下內容:
def print_object(self):
print("The name is: {self.name}")
print("The year is: {self.year}")
print("The grades are: {self.grades}")
如果您有任何問題,請隨時與我們聯系。
uj5u.com熱心網友回復:
該list.__str__()方法用于repr()獲取串列元素的表示。所以這顯示了串列repr()中所有Grade物件的grades。由于Grade沒有自定義__repr__()方法,因此您將獲得默認表示。
您可以定義Grade.__repr__()以指定如何顯示成績,或者您可以更改從串列中的物件中Student.__str__()獲取分數的方法。Grade
class Student():
def __init__(self,name,year):
self.name=name
self.year=year
self.grades=[]
def add_grade(self, grade):
if isinstance(grade, Grade):
self.grades.append(grade)
else:
pass
def __str__(self):
return str([str(g) for g in self.grades])
uj5u.com熱心網友回復:
問題是它Grade本身沒有作為字串的簡潔表示。因此str(self.grades)呼叫只能列印抽象實體資料的串列。你可以包括一個表示:
class Grade():
# the other stuff goes here...
def __repr__(self):
return f'Grade({self.score}'
現在print(pieter)列印:
[Grade(100), Grade(40)]
但是,我不會使用__str__()魔術方法來列印成績。print_grades()為此目的定義一個顯式方法會更清楚。__str__()通常用于輸出有關課程的所有相關資訊(出于除錯目的等)。因此,在您的情況下,它也應該回傳所有學生資訊,而不僅僅是成績。
uj5u.com熱心網友回復:
在您的 add_grade 方法中,您將 Grade 物件插入 self.grades,然后當您列印 self.grades 時,您會獲得 Grade 物件串列。也許您想將 Grade 物件中的 score 欄位插入 self.grades。這樣,您可以在列印出學生時列印出分數。像這樣:
def add_grade(self, grade):
if type(grade) == Grade:
self.grades.append(grade.score)
另外,不需要在方法中撰寫 else 陳述句,如果傳遞給它的引數不是 Grade 物件,它會自動回傳 None。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470749.html
