物件導向(OOP),不僅提供了更結構化的程式碼組織方式,還有助於提高程式碼的可讀性、可重用性和可維護性。本文將介紹物件導向概念中的類別、對象、繼承、封裝和多型,並透過具體範例來展示這些概念如何在實際編程中應用。
類別是對一組具有相同屬性和行為的對象的抽象。在 Python 中,類別是使用關鍵字 class
定義的。
class MyClass:
# 類別屬性
attribute = 0
# 初始化方法 (__init__)
# __init__ 是類別的構造函數,用於初始化新創建的對象的屬性。
def __init__(self, value):
self.attribute = value # 使用 self 來訪問類別屬性
# 方法
def method(self):
return self.attribute * 2
對象是根據類別創建的實例。每個對象都具有類別定義的屬性和行為。
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())
😊 感謝你的耐心閱讀,若是你喜歡這篇內容,可以透過以下方式表達你的喜歡 😊