![](/img/trans.png)
[英]How can I call any method inside a class depending on an input to another method in the same class?
[英]How do I call the variable in one method in another method inside the same class?
我對 Python 非常陌生,我使用 Spyder 來完成我的 Python 作業。 我正在編寫一個代碼,需要使用 class 來找出學生的平均分數。 這是我的代碼:
class Student:
def __init__(self,name='default student'):
if name==None:
self.name='default student'
elif name!=None:
self.name=name
def quizcalc(self,*marks):
s=0
for x in marks:
s+=x
return s/3
def printdetail(self):
print("Hello ",self.name)
print("Your average quiz score is ",self.quizcalc) #something is not right in this line
s1 = Student()
s1.quizcalc(10)
print('--------------------------------')
s1.printdetail()
s2 = Student('Harry')
s2.quizcalc(10,8)
print('--------------------------------')
s2.printdetail()
s3 = Student('Hermione')
s3.quizcalc(10,9,10)
print('--------------------------------')
s3.printdetail()
這就是 output 的樣子:
--------------------------------
Hello default student
Your average quiz score is <bound method Student.quizcalc of <__main__.Student object at 0x000001FDD65AEA48>>
--------------------------------
Hello Harry
Your average quiz score is <bound method Student.quizcalc of <__main__.Student object at 0x000001FDD65AE708>>
--------------------------------
Hello Hermione
Your average quiz score is <bound method Student.quizcalc of <__main__.Student object at 0x000001FDD65AE348>>
但我想要的 output 是這樣的:
--------------------------------
Hello default student
Your average quiz score is 3.3333333333333335
--------------------------------
Hello Harry
Your average quiz score is 6.0
--------------------------------
Hello Hermione
Your average quiz score is 9.666666666666666
你只需要添加括號
self.quizcalc()
如果沒有括號,您只是打印 function 本身,而不是運行 function 的結果。
為了好玩,讓我舉例說明一個場景,您可能真的想像以前那樣打印出 function 名稱。
所以假設你有 class
class Student:
def quizcalc_integer(self, *marks):
pass # code goes here
def quizcalc_decimal(self, *marks)
pass # code goes here
def printdetail(self, quiz_function):
print("Hello ",self.name)
print("Your average quiz score is ",quiz_function())
s1 = Student()
如果你正在使用十進制數字,你可以這樣做
s1.printdetail(s1.quizcalc_integer)
如果它們不是小數
s1.printdetail(s1.quizcalc_decimal)
非常虛構的示例,但是如果您嘗試調試正在發生的事情並且想知道 function 存儲在變量quiz_function
中,那么您將有理由執行print(quiz_function)
而不是print(quiz_function())
.
這就是我對為什么首先可以打印 function 的名稱的長期不必要的回答。
如果您被允許更改 class 結構,那么您可以進行以下更改:
class Student:
def __init__(self,name='default student'):
self.average=0.0 #1st change
if name==None:
self.name='default student'
elif name!=None:
self.name=name
def quizcalc(self,*marks):
s=0
for x in marks:
s+=x
self.average=s/3 #2nd change
def printdetail(self):
print("Hello ",self.name)
print("Your average quiz score is ",self.average)#3rd change
s1 = Student()
s1.quizcalc(10)
print('--------------------------------')
s1.printdetail()
s2 = Student('Harry')
s2.quizcalc(10,8)
print('--------------------------------')
s2.printdetail()
s3 = Student('Hermione')
s3.quizcalc(10,9,10)
print('--------------------------------')
s3.printdetail()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.