首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 面向物件程式設計(OOP)核心概念完整指南

     編輯:更多程式設計知識

Python 從設計之初即是一門徹底的面向物件語言。掌握類別、物件、繼承、封裝等核心概念,是進階 Python 開發的基石。本文系統整理 OOP 關鍵術語、類別定義、實例化、繼承、多型、運算子多載、資料隱藏與垃圾回收機制,並附上可執行的程式碼範例。

核心術語速查表

術語說明
類別用戶定義的原型,定義物件的屬性(資料成員)與方法。
類別變數所有實例共享的變數,定義於類別內部、方法之外。
實例變數屬於特定實例的變數,通常在 __init__ 中以 self.變數 定義。
繼承子類別繼承父類別的屬性與方法,可複用、擴充或覆寫。
實例化根據類別建立具體物件的過程。
方法定義在類別內部的函式,第一個參數慣例為 self。

建立類別與實例

class Employee:
    """所有員工的基礎類別"""
    empCount = 0  # 類別變數

    def __init__(self, name, salary):
        self.name = name      # 實例變數
        self.salary = salary  # 實例變數
        Employee.empCount += 1

    def display_count(self):
        print(f"Total Employee {Employee.empCount}")

    def display_employee(self):
        print(f"Name: {self.name}, Salary: {self.salary}")

# 建立實例
emp1 = Employee("Zara", 2000)
emp2 = Employee("Manni", 5000)

emp1.display_employee()
emp2.display_employee()
print(f"Total Employee {Employee.empCount}")

輸出:

Name: Zara, Salary: 2000
Name: Manni, Salary: 5000
Total Employee 2

屬性動態管理

Python 允許執行期動態增刪改屬性:

emp1.age = 7      # 新增
emp1.age = 8      # 修改
del emp1.age      # 刪除

# 內建函式操作屬性
hasattr(emp1, 'age')   # 檢查存在性
getattr(emp1, 'age')   # 取得值
setattr(emp1, 'age', 8) # 設定值
delattr(emp1, 'age')   # 刪除屬性

內建類別屬性

每個類別自動擁有:__dict__(命名空間字典)、__doc__(文件字串)、__name__(類別名稱)、__module__(模組名)、__bases__(父類別元組)。

繼承與多型

class Parent:
    parent_attr = 100
    def __init__(self):
        print("Calling parent constructor")
    def parent_method(self):
        print("Calling parent method")

class Child(Parent):
    def __init__(self):
        print("Calling child constructor")
    def child_method(self):
        print("Calling child method")
    # 覆寫父類別方法
    def parent_method(self):
        print("Calling overridden child method")

c = Child()
c.child_method()
c.parent_method()  # 呼叫覆寫後的方法

運算子多載

透過定義特殊方法(如 __add__、__str__)賦予物件直觀運算行為:

class Vector:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __str__(self):
        return f'Vector ({self.a}, {self.b})'
    def __add__(self, other):
        return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2, 10)
v2 = Vector(5, -2)
print(v1 + v2)  # Vector (7, 8)

資料隱藏(名稱修飾)

以雙底線開頭的屬性(如 __secret)會被 Python 內部重命名為 _ClassName__secret,外部無法直接存取,但仍可透過修飾名存取:

class JustCounter:
    __secret_count = 0
    def count(self):
        self.__secret_count += 1
        print(self.__secret_count)

counter = JustCounter()
counter.count()  # 1
counter.count()  # 2
# print(counter.__secret_count)  # AttributeError
print(counter._JustCounter__secret_count)  # 2

垃圾回收與解構函式

Python 採用參考計數機制,輔以循環垃圾收集器。當物件參考計數歸零時自動回收記憶體。類別可定義 __del__ 方法在物件銷毀前執行清理工作:

class Point:
    def __init__(self, x=0, y=0):
        self.x, self.y = x, y
    def __del__(self):
        print(f"{self.__class__.__name__} destroyed")

pt1 = Point()
pt2 = pt1
pt3 = pt1
del pt1, pt2, pt3  # 最後一次 del 觸發 __del__

總結

Python 的 OOP 機制靈活且強大,支援動態屬性、多重繼承、運算子多載與自動記憶體管理。深入理解類別與實例的關係、方法解析順序(MRO)以及特殊方法的運作,能讓你編寫出更符合 Python 風格、可維護性高的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved