初學者指南:深入了解 Python 實體變數
更新日期: 2024 年 10 月 11 日
在學習 Python 的過程中,物件導向程式設計(Object-Oriented Programming, OOP) 是一個關鍵概念。
OOP 允許我們透過 類別(Class) 來創建 實體(Instance),從而更有效地組織和管理程式碼。
在物件導向中,實體變數(Instance Variables) 是理解類別和實體之間關係的重要元素。
本文將為新手詳細介紹 Python 中的實體變數,解釋其作用、如何使用,以及與類別變數的區別。
什麼是實體變數?
實體變數 是定義在類別的 __init__
方法中,並以 self
關鍵字引用的變數。
它們屬於實體本身,每個實體都有自己的實體變數,彼此之間互不影響。
實體變數用於存儲實體的狀態或屬性。
特點
- 獨立性:每個實體的實體變數都是獨立的,修改一個實體的實體變數不會影響其他實體。
- 通過
self
訪問:實體變數必須通過self
關鍵字來定義和訪問。
實體變數的定義與使用
定義實體變數
在 __init__
方法中,使用 self
關鍵字來定義實體變數。
class 類別名稱:
def __init__(self, 參數1, 參數2):
self.變數1 = 參數1
self.變數2 = 參數2
示例
class Person:
def __init__(self, name, age):
self.name = name # 實體變數
self.age = age # 實體變數
創建實體並使用實體變數
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
print(person1.name) # 輸出:Alice
print(person2.age) # 輸出:25
實體變數與類別變數的區別
類別變數
- 定義在類別內,且不在任何方法內。
- 所有實體共享相同的類別變數。
- 通過類別名或
self
訪問。
比較
項目 | 實體變數 | 類別變數 |
---|---|---|
定義位置 | __init__ 方法內 | 類別內部,方法外部 |
關鍵字 | self.變數名 | 直接定義變數名 |
所屬 | 屬於實體,彼此獨立 | 屬於類別,所有實體共享 |
訪問方式 | self.變數名 | 類別名.變數名 或 self.變數名 |
示例
class Circle:
pi = 3.14159 # 類別變數
def __init__(self, radius):
self.radius = radius # 實體變數
def area(self):
return Circle.pi * self.radius ** 2
示例:建立一個簡單的學生類別
定義類別
class Student:
school = "Python 學院" # 類別變數
def __init__(self, name, student_id):
self.name = name # 實體變數
self.student_id = student_id # 實體變數
self.grades = [] # 實體變數
def add_grade(self, grade):
self.grades.append(grade)
def average_grade(self):
if not self.grades:
return 0
return sum(self.grades) / len(self.grades)
使用類別
# 創建學生實體
student1 = Student("Alice", "S001")
student2 = Student("Bob", "S002")
# 添加成績
student1.add_grade(90)
student1.add_grade(85)
student2.add_grade(75)
student2.add_grade(80)
# 計算平均成績
print(f"{student1.name} 的平均成績:{student1.average_grade()}") # 輸出:Alice 的平均成績:87.5
print(f"{student2.name} 的平均成績:{student2.average_grade()}") # 輸出:Bob 的平均成績:77.5
# 訪問類別變數
print(student1.school) # 輸出:Python 學院
print(student2.school) # 輸出:Python 學院
修改和訪問實體變數
修改實體變數
可以直接通過實體來修改實體變數。
student1.name = "Alice Smith"
print(student1.name) # 輸出:Alice Smith
動態添加實體變數
也可以在程式執行過程中,為實體動態添加新的實體變數。
student1.major = "Computer Science"
print(student1.major) # 輸出:Computer Science
注意:動態添加的實體變數只屬於該實體,其他實體無法訪問。
print(student2.major) # 會引發 AttributeError
實體變數的應用場景
- 存儲實體的個別狀態:每個實體都有自己的狀態,使用實體變數來存儲。
- 封裝資料:將與實體相關的資料封裝在實體變數中,保護資料的完整性。
- 實現實體之間的區別:實體變數使得每個實體都有獨特的屬性。
結論
實體變數是 Python 物件導向程式設計中的重要概念,透過它們,我們可以:
- 為每個實體存儲獨立的屬性。
- 封裝與實體相關的資料,增強程式的模組化和可維護性。
- 與類別變數區分開來,更靈活地管理實體和類別的屬性。
理解並熟練使用實體變數,將有助於你更好地掌握 Python 的物件導向編程,編寫出更清晰、可重用的程式碼。
進一步學習
- 類別方法與靜態方法:瞭解
@classmethod
和@staticmethod
的用法。 - 封裝性:學習如何使用私有屬性(
__變數名
)和保護屬性(_變數名
)來實現資料封裝。 - 繼承與多型:深入研究類別之間的繼承關係,實現更複雜的物件導向設計。
- 特殊方法:瞭解
__str__
、__repr__
、__len__
等特殊方法,提升類別的功能性。