# Python 自訂類別 (Class)
> 作者:王一哲
> 日期:2022/12/21
<br />
## 基本觀念
如果想要在 Python 程式中產生許多相似的物件,而且我們還想要在這些物件中自訂函式,就可以使用 class 來達成目的,通常 class 的名稱開頭為大寫字母。如果不繼承其它的 class 語法如下
```python
class 名稱:
def __init__(self, 參數1, 參數2, ...):
self.參數1 = 參數1
self.參數2 = 參數2
...
def 函式1(參數):
return 回傳值1 # 若無回傳值則可省略此行
def 函式2(參數):
return 回傳值2 # 若無回傳值則可省略此行
```
<br />
使用這個 class 建立物件時,需要輸入自訂函式 \_\_init\_\_ 括號內除了 self 以外的參數,接下來會自動執行 \_\_init\_\_ 的內容。
<br />
如果繼承其它的 class 則語法為:
```python
class 名稱(來源):
def 函式1(參數):
return 回傳值1
def 函式2(參數):
return 回傳值2
```
<br /><br />
## 自訂 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,引用時會回傳平均分數。
```python=
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
```
<br />
若用 Student 建立物件 student1
```python
student1 = Student("John", 1, 80.1, 71.2, 75.3, 85.7, 82.6)
```
<br />
輸入
```python
student1.printName()
```
執行結果為
```python
Name: John
```
<br />
輸入
```python
student1.printNumber()
```
執行結果為
```python
Number: 1
```
<br />
輸入
```python
student1.printScore()
```
執行結果為
```python
Chinese English Math Physics Chemistry
80.1 71.2 75.3 85.7 82.6
```
<br />
輸入
```python
avg1 = student1.printAverage()
```
執行結果為
```python
Average: 78.98
```
<br />
輸入
```python
print(avg1)
```
執行結果為
```python
78.97999999999999
```
<br />
## 結語
這是自訂 class 最簡單的說明及應用,雖然目前看起來似乎功能並不強大,但是在需要定義大量且相同類型的物件時非常有用。
<br />
---
###### tags:`Python`