2024-11-30|閱讀時間 ‧ 約 0 分鐘

Python 100天-從新手到大師學習筆記Day08:物件導向程式設計基礎


物件導向程式設計基礎

面向物件程式設計(Object-Oriented Programming,簡稱 OOP)是一種程式設計範式,強調將程式組織成由物件構成的模組。每個物件都包含了資料和操作資料的方法。OOP 的核心理念是透過模擬現實世界中的物件來解決問題,並且讓程式碼更具組織性、可讀性和可維護性。


OOP 有四大核心概念:封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)和抽象(Abstraction)。


以下是 OOP 的基礎概念——物件的簡單介紹。


定義類(Class)

在Python中可以使用class關鍵字定義類,然後在類中透過函式來定義方法,這樣就可以將物件的動態特徵描述出來。

例如,"車子"可以是一個類,其中包含屬性如顏色、品牌、速度等,還包含方法如加速、煞車等行為。


定義物件(Object)

物件是根據類創建的具體實例,是類的具體化。物件擁有類定義的屬性和方法,是實際存在的個體。例如,"一台紅色的 Toyota 車子"就是 "車子" 類的物件。


類與物件的封裝(Encapsulation)練習

封裝指的是將資料(屬性)和行為(方法)組合到一個單獨的單位中,並讓它們能夠相互操作。此處 Car 類中,colorbrand 這兩個屬性以及 start 方法都被封裝在一起,使得每個 Car 物件都包含自己的資料與行為。

'''
Version: Day08
Author: SQA yang
面向物件程式設計
(Object-Oriented Programming,簡稱 OOP)
'''

# 定義一個Car的類class
class Car:
def __init__(self, color, brand):
self.color = color
self.brand = brand

def start(self):
print(f"{self.brand} car is starting.")

my_car = Car("Red", "Toyota")  # 創建一個Car類的物件

# 使用物件屬性和方法
print(my_car.color)       # 輸出: Red
print(my_car.brand)       # 輸出: Toyota
my_car.start()            # 輸出: Toyota car is starting.

python物件導向設計:封裝案例


類與物件的封裝、抽象、繼承、多型練習


'''
Version: Day08
Author: SQA yang
面向物件程式設計(Object-Oriented Programming,簡稱 OOP)
'''
from abc import ABC, abstractmethod
# 抽象基類 Vehicle,代表所有車輛的抽象類

class Vehicle(ABC):
def __init__(self, color, brand):
self.color = color
self.brand = brand

@abstractmethod
def start(self):
"""抽象方法,必須由子類別實作具體功能"""
pass

# Car 類,繼承自 Vehicle 類,並實現 start 方法
class Car(Vehicle):
def start(self):
print(f"{self.brand} car is starting with a soft engine sound.")
# Truck 類,繼承自 Vehicle 類,並實現自己的 start 方法

class Truck(Vehicle):
def start(self):
print(f"{self.brand} truck is starting with a heavy engine sound.")

# 創建不同類型的車輛物件
my_car = Car("Red", "Toyota")
my_truck = Truck("Blue", "Ford")

# 使用多型,呼叫 start 方法
my_car.start()     # 輸出: Toyota car is starting with a soft engine sound.
my_truck.start()   # 輸出: Ford truck is starting with a heavy engine sound.

封裝、抽象、繼承、多型練習



  1. 抽象(Abstraction)
    • Vehicle 類是一個抽象基類,使用了 ABC 模組和 @abstractmethod 裝飾器來定義 start 方法作為抽象方法。抽象基類本身不能實例化,必須被其他子類繼承並實作其方法。
  2. 繼承(Inheritance)
    • Car 和 Truck 類繼承了 Vehicle 類,因此它們會擁有 Vehicle 的屬性(color 和 brand)。這些子類也必須實現 Vehicle 類中的抽象方法 start,以符合抽象基類的要求。
  3. 多型(Polymorphism)
    • 雖然 Car 和 Truck 都繼承了 Vehicle 類並擁有相同的 start 方法名,但它們的 start 方法執行不同的操作。Car 的 start 方法會顯示 "soft engine sound",而 Truck 的 start 方法則顯示 "heavy engine sound"。這就是多型,因為相同的方法(start)在不同的類中有不同的行為。
  4. 封裝(Encapsulation)
    • 每個物件(例如 my_car 和 my_truck)封裝了自己的屬性和方法,且不影響其他物件的屬性。封裝讓每個物件有自己的 color 和 brand,並能使用 start 方法。



以上為Python100天從新手到大師的Day08學習筆記。



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.