Try   HackMD

Python 自訂類別 (Class)

作者:王一哲
日期:2022/12/21


基本觀念

如果想要在 Python 程式中產生許多相似的物件,而且我們還想要在這些物件中自訂函式,就可以使用 class 來達成目的,通常 class 的名稱開頭為大寫字母。如果不繼承其它的 class 語法如下

class 名稱:
    def __init__(self, 參數1, 參數2, ...):
        self.參數1 = 參數1
        self.參數2 = 參數2
        ...
        
    def 函式1(參數):
        return 回傳值1 # 若無回傳值則可省略此行

    def 函式2(參數):
        return 回傳值2 # 若無回傳值則可省略此行

使用這個 class 建立物件時,需要輸入自訂函式 __init__ 括號內除了 self 以外的參數,接下來會自動執行 __init__ 的內容。

如果繼承其它的 class 則語法為:

class 名稱(來源):
    def 函式1(參數):
        return 回傳值1

    def 函式2(參數):
        return 回傳值2



自訂 Class 實例

我們自訂一個 class,名稱為 Student,使用時需要輸入的參數為 name、number、chinese、english、math、physics、chemistry,接下來會自動執行 __init__ 的內容,並將參數 name 的值指定給 self.name,將參數 number 的值指定給 self.number,將參數 chinese、english、math、physics、chemistry 的值指定給用來儲存各科成績的串列 self.scores。同時定義了以下4個函式:

  1. 印出名稱的 printName
  2. 印出號碼的 printNumber
  3. 印出各科成績的 printScore
  4. 印出平均分數的 printAverage,引用時會回傳平均分數。
class Student: def __init__(self, name, number, chinese, english, math, physics, chemistry): self.name = name self.number = number self.scores = [chinese, english, math, physics, chemistry] def printName(self): print("Name: {:s}".format(self.name)) def printNumber(self): print("Number: {:d}".format(self.number)) def printScore(self): print("Chinese\tEnglish\tMath\tPhysics\tChemistry") for score in self.scores: print(score, end='\t') print("") def printAverage(self): average = sum(self.scores)/len(self.scores) print("Average: {:.2f}".format(average)) return average

若用 Student 建立物件 student1

student1 = Student("John", 1, 80.1, 71.2, 75.3, 85.7, 82.6)

輸入

student1.printName()

執行結果為

Name: John

輸入

student1.printNumber()

執行結果為

Number: 1

輸入

student1.printScore()

執行結果為

Chinese	English	Math	Physics	Chemistry
80.1	71.2	75.3	85.7	82.6	

輸入

avg1 = student1.printAverage()

執行結果為

Average: 78.98

輸入

print(avg1)

執行結果為

78.97999999999999

結語

這是自訂 class 最簡單的說明及應用,雖然目前看起來似乎功能並不強大,但是在需要定義大量且相同類型的物件時非常有用。


tags:Python