面向對象初探:Python類與對象的簡單理解

什麼是面向對象編程?

想象一下,你想做一個簡單的遊戲,比如“打氣球”。傳統的編程思路可能是先寫“檢測氣球是否被點擊”,再寫“氣球移動”,再寫“計分”……這些代碼散落在不同的地方,就像一堆零散的零件。但如果用面向對象的思路,你會把“氣球”本身看作一個獨立的“角色”——它有自己的顏色、大小(這些是“屬性”),還有“移動”“被點擊則消失”(這些是“行爲”)。這樣把數據和行爲封裝在一個“對象”裏,是不是更像我們現實中觀察世界的方式?

面向對象編程(OOP,Object-Oriented Programming)就是以“對象”爲核心,把問題拆解成一個個對象,每個對象負責自己的屬性和行爲。Python 是一門支持面向對象的語言,理解類和對象是進入 Python 面向對象世界的第一步。

Python中的“類”是什麼?

“類”(Class)就像一張“設計圖”或“模板”,用來描述對象的共同特徵和行爲。比如“動物”是一個類,它包含所有動物的共同屬性(比如有生命、會呼吸)和行爲(比如跑、叫);而具體的“貓”“狗”就是這個類的一個個“對象”(實例)。

在 Python 中,我們用 class 關鍵字定義一個類。比如定義一個“汽車”類:

class Car:
    # 這裏將定義汽車的屬性和方法
    pass  # pass 表示暫時沒有內容,先佔位

這個 Car 類現在是空的,我們需要給它加上“屬性”和“方法”。

類的組成:屬性與方法

屬性:對象的“特徵”,就像汽車有顏色、品牌、速度等特徵,在 Python 中表現爲類中的變量。
方法:對象的“行爲”,就像汽車可以“行駛”“加油”,在 Python 中表現爲類中的函數(注意:類中的函數叫“方法”,不是普通函數)。

1. 定義屬性

我們給 Car 類加上一些屬性,比如 color(顏色)、speed(速度)。爲了讓每個對象的屬性能獨立初始化,我們需要用 構造方法 __init__(這是 Python 的特殊方法,會在創建對象時自動調用)。

class Car:
    # 構造方法:初始化對象的屬性
    def __init__(self, color, brand):
        # self 是一個特殊參數,代表對象本身(比如當前這輛車)
        self.color = color  # 實例屬性:顏色
        self.brand = brand  # 實例屬性:品牌
        self.speed = 0      # 初始速度爲0
  • __init__ 方法的第一個參數必須是 self,它指向當前對象,就像“這輛車自己”。
  • 當我們創建對象時,__init__ 會自動運行,傳入的參數(如 colorbrand)會被賦值給 self 的屬性。
2. 定義方法

Car 類加上“行爲”,比如 drive(行駛)和 stop(停止):

class Car:
    def __init__(self, color, brand):
        self.color = color
        self.brand = brand
        self.speed = 0

    # 行駛方法:加速
    def drive(self, speed_increase):
        self.speed += speed_increase
        print(f"{self.brand}{self.color}汽車正在加速,當前速度:{self.speed}")

    # 停止方法:減速到0
    def stop(self):
        self.speed = 0
        print(f"{self.brand}{self.color}汽車已停止,速度:{self.speed}")

這裏的 drivestop 就是 Car 類的“方法”,每個對象(實例)都可以調用這些方法。

從類到對象:實例化

有了類之後,我們需要創建具體的對象(實例化),就像根據“汽車設計圖”造出一輛輛具體的汽車。

# 創建對象:調用類名(),並傳入構造方法需要的參數
my_car = Car("紅色", "特斯拉")  # 實例化一個 Car 對象,顏色紅色,品牌特斯拉

# 訪問屬性:通過對象.屬性名
print(my_car.color)  # 輸出:紅色
print(my_car.brand)  # 輸出:特斯拉

# 調用方法:通過對象.方法名()
my_car.drive(50)  # 輸出:特斯拉的紅色汽車正在加速,當前速度:50
my_car.drive(30)  # 輸出:特斯拉的紅色汽車正在加速,當前速度:80
my_car.stop()     # 輸出:特斯拉的紅色汽車已停止,速度:0

關鍵點:每個對象(如 my_car)都有自己獨立的屬性值,修改一個對象的屬性不會影響其他對象。

爲什麼需要 self

self 是 Python 中一個“約定俗成”的參數,它的作用是讓方法知道“操作的是哪個對象”。比如 my_car.drive(50) 中,self 會自動指向 my_car,所以 self.speed 就是 my_carspeed 屬性。如果沒有 self,方法就無法區分是哪個對象的屬性,會報錯。

小練習:定義一個“學生”類

嘗試自己寫一個簡單的 Student 類,包含:
- 屬性:name(姓名)、age(年齡)、score(分數)
- 方法:study()(學習,分數+10)、introduce()(自我介紹,打印姓名、年齡、分數)

class Student:
    def __init__(self, name, age, score=0):  # score 默認值爲0
        self.name = name
        self.age = age
        self.score = score

    def study(self):
        self.score += 10
        print(f"{self.name} 學習後,分數變爲:{self.score}")

    def introduce(self):
        print(f"我叫{self.name},今年{self.age}歲,分數是{self.score}分")

# 創建學生對象
student1 = Student("小明", 15, 80)
student1.introduce()  # 輸出:我叫小明,今年15歲,分數是80分
student1.study()      # 輸出:小明 學習後,分數變爲:90
student1.introduce()  # 輸出:我叫小明,今年15歲,分數是90分

總結

  • 類(Class) 是對象的模板,定義了對象的屬性和方法。
  • 對象(Object) 是類的實例,是具體的“東西”,有自己的屬性值。
  • 屬性 是對象的特徵(變量),方法 是對象的行爲(函數)。
  • __init__ 是構造方法,用於初始化對象屬性;self 指向當前對象,是方法的第一個參數。

面向對象編程的核心思想是“封裝”,即把數據和操作數據的方法放在一起,讓代碼更模塊化、易維護。後續我們會學習更復雜的概念(如繼承、多態),但先打好類與對象的基礎吧!

小夜