Python 程式札記 : 物件導向的基本概念

2023/12/06閱讀時間約 7 分鐘

物件導向(OOP),不僅提供了更結構化的程式碼組織方式,還有助於提高程式碼的可讀性、可重用性和可維護性。本文將介紹物件導向概念中的類別、對象、繼承、封裝和多型,並透過具體範例來展示這些概念如何在實際編程中應用。

類別和對象

類別(Class)

類別是對一組具有相同屬性和行為的對象的抽象。在 Python 中,類別是使用關鍵字 class 定義的。

class MyClass:
# 類別屬性
attribute = 0

# 初始化方法 (__init__)
# __init__ 是類別的構造函數,用於初始化新創建的對象的屬性。
def __init__(self, value):
self.attribute = value # 使用 self 來訪問類別屬性

# 方法
def method(self):
return self.attribute * 2

對象(Object)

對象是根據類別創建的實例。每個對象都具有類別定義的屬性和行為。

obj = MyClass(10)

# 訪問屬性
print(obj.attribute) # 輸出 10

# 調用方法
print(obj.method()) # 輸出 20

這裡的 self 在 Python 類別的方法中代表當前物件的實例,用於訪問類別的屬性和方法。

實際範例

以下範例展示了如何使用類別和對象來建立學生資料:

class Student:
def __init__(self, name, age):
self.name = name
self.age = age

def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old."

student1 = Student("Alice", 20)
student2 = Student("Bob", 22)

print(student1.greet()) # 輸出 Hello, my name is Alice and I am 20 years old.
print(student2.greet()) # 輸出 Hello, my name is Bob and I am 22 years old.

繼承、封裝與多型

繼承

繼承是允許一個類別獲得另一個類別的屬性和方法。子類別可以擴展或修改繼承的行為。

class Animal:
def __init__(self, name):
self.name = name

def speak(self):
pass

class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"

class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"

dog = Dog("Rex")
cat = Cat("Whiskers")
print(dog.speak()) # 輸出: Rex says Woof!
print(cat.speak()) # 輸出: Whiskers says Meow!

封裝

封裝是將物件的屬性和行為方法包裝在一起的過程。在 Python 中,封裝通常透過使用私有和受保護的變數來實現,私有變數是通過在變數名前加上雙下劃線來定義的,用於完全隱藏數據和實現細節,防止外部訪問。

class MyClass:
def __init__(self):
self.__private_var = "I am a private variable"

def get_private_var(self):
return self.__private_var

obj = MyClass()
print(obj.get_private_var()) # 這行可以正常執行
# print(obj.__private_var) # 這行會產生錯誤

受保護變數是通過在變數名前加上單個下劃線定義的,提供了一定程度的隱藏,但仍允許子類訪問和使用這些變數。

class MyClass:
def __init__(self):
self._protected_var = "I am a protected variable"

def get_protected_var(self):
return self._protected_var

class SubClass(MyClass):
def __init__(self):
super().__init__()
print(f"Accessing protected variable from subclass: {self._protected_var}")

obj = MyClass()
print(obj.get_protected_var()) # 可以通過內部方法訪問受保護變數
sub_obj = SubClass() # 子類可以訪問受保護變數

多型

多型是指不同類別的物件可以透過相同的介面呈現不同的行為。在 Python 中,這通常是透過方法重寫來實現的。

class Shape:
def area(self):
pass

class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height

def area(self):
return self.width * self.height

class Circle(Shape):
def __init__(self, radius):
self.radius = radius

def area(self):
return 3.14 * self.radius * self.radius

shapes = [Rectangle(2, 3), Circle(1)]
for shape in shapes:
print(shape.area())

😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊

❤️按個愛心|💬留言互動|🔗分享此文|📌追蹤阿梧|☕請喝咖啡

51會員
82內容數
「梧笙」即「吾生」,意即我的生命,朋友都叫我「阿梧(Awu)」,高雄人。我喜歡學習新技能,從程式設計到網路工具,再到社群經營和影片剪輯。日常興趣是打遊戲、看動漫、讀小說和聽音樂。我會把這些興趣寫成文章,如果你有任何想法或問題,歡迎來信到我的郵箱 [email protected]
留言0
查看全部
發表第一個留言支持創作者!