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

Python 3 進階入門:模組化架構與物件導向核心觀念

     編輯:更多程式設計知識

Python 被譽為「瑞士軍刀」,其強大的標準庫與模組生態是核心競爭力。本文承接基礎語法,深入探討模組化組織程式碼、作用域規則(LEGB)、類別機制與繼承模型,並對比 Python 2/3 差異,幫助開發者建立工程化思維。

一、模組化:從單檔腳本到套件結構

專案成長到一定規模,必須將功能拆分為多個 .py 檔案並組織成目錄樹。Python 以「目錄 + __init__.py」定義套件(Package)。

專案結構範例

ProjectRoot/
├── main.py              # 入口腳本
├── utils/
│   ├── __init__.py      # 可為空,標記為套件
│   ├── helper.py
│   └── constants.py
└── models/
    ├── __init__.py
    └── user.py

匯入機制與 __name__

# main.py
import utils.helper
print(utils.helper.__name__)  # 輸出 'utils.helper'

from models import user
u = user.User('Alice', 30)
  • import 會執行目標模組的頂層程式碼(只執行一次,後續匯入直接從 sys.modules 快取取得)。
  • __init__.py 可執行套件初始化邏輯(如動態匯入子模組、設定 __all__ 控制 from pkg import * 行為)。
  • dir(module) 列出模組公開屬性,除錯好幫手。

二、作用域規則:LEGB 法則

Python 變數查找順序:Local → Enclosing → Global → Built-in。關鍵字 global、nonlocal 打破預設賦值行為。

def scope_test():
    spam = 'test spam'           # Local
    def do_local():
        spam = 'local spam'      # 新建區域變數,不影響外層
    def do_nonlocal():
        nonlocal spam            # 綁定外層 Enclosing 作用域的 spam
        spam = 'nonlocal spam'
    def do_global():
        global spam              # 綁定模組層級 Global spam
        spam = 'global spam'
    do_local()
    print('After local:', spam)      # test spam
    do_nonlocal()
    print('After nonlocal:', spam)   # nonlocal spam
    do_global()
    print('After global:', spam)     # global spam

scope_test()
print('Global scope:', spam)         # global spam

三、類別與物件導向

Python 類別機制融合 C++ 多重繼承與 Modula-3 模組觀念,採「基於協議」而非「基於介面」的鴨子類型。

基本類別結構

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('constructor run')

    def greet(self):
        print(f'Hi, I am {self.name}, {self.age} years old.')

p = Person('Wang', 20)
p.greet()
  • self 相當於 C++/Java 的 this,但必須顯式寫在方法第一參數(慣例命名為 self)。
  • __init__ 為建構子,物件建立時自動呼叫。

繼承與多型

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)  # Python 3 簡潔 super()
        self.student_id = student_id

    def greet(self):                 # 覆寫 override
        super().greet()
        print(f'Student ID: {self.student_id}')

s = Student('Li', 22, 'S12345')
s.greet()
  • 支援多重繼承:class C(A, B):,方法解析順序遵循 MRO(C3 線性化)。
  • Python 3 移除「經典類」,所有類別隱式繼承 object,統一為新式類,統一物件模型。

預設參數替代方法多載

Python 不支援同名多載,但可用預設參數達到同樣效果:

def greet(self, prefix='Hello'):
    print(f'{prefix}, {self.name}')

所有方法皆為虛擬方法

子類別可隨意覆寫父類別方法,無需 virtual 關鍵字,體現動態語言靈活性。

四、工程化建議

  1. 使用 venv 隔離專案依賴,配合 requirements.txt 鎖定版本。
  2. 遵循 PEP 8 命名規範:模組 lower_case、類別 CapWords、常數 UPPER_CASE。
  3. 善用 __all__ 明確公開 API,避免內部實作洩漏。
  4. 型別提示:Python 3.5+ 支援 def func(x: int) -> str:,配合 mypy 靜態檢查提升可維護性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved