簡體   English   中英

如何在同一個 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 結構,那么您可以進行以下更改:

  1. 創建實例級變量平均值。
  2. 而不是從 quizcalc 返回值,而是將計算結果分配給 self.average。
  3. 在 printdetail() 內部打印實例變量 self.average。 請檢查以下代碼:
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.

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