Các phương thức import module trong Python và nguyên tắc sử dụng

1. Import toàn bộ module (Standard Import)

Cách cơ bản nhất để đưa một module vào chương trình là sử dụng từ khóa import. Khi sử dụng cú pháp này, Python sẽ tạo một tham chiếu đến module đó trong không gian tên (namespace) hiện tại.

import text_analyzer

# Phải sử dụng tên module làm tiền tố khi gọi hàm
result = text_analyzer.count_words(document)

Với phương pháp này, bạn bắt buộc phải sử dụng tên đầy đủ (fully qualified name) khi truy cập các hàm, lớp hoặc biến bên trong module. Điều này giúp mã nguồn rõ ràng hơn, tránh xung đột tên và giúp người đọc dễ dàng biết được hàm đó xuất phát từ đâu.

2. Import chọn lọc hoặc Import toàn bộ (Selective and Wildcard Import)

Nếu bạn chỉ muốn sử dụng một vài thành phần cụ thể từ module hoặc muốn gọi trực tiếp mà không cần thông qua tên module, bạn có thể dùng cú pháp from ... import ....

Import chọn lọc

from text_analyzer import count_words
from text_analyzer import count_words, find_keywords, summarize

Các hàm được chỉ định sẽ được đưa trực tiếp vào không gian tên cục bộ. Do đó, bạn có thể gọi count_words() thay vì text_analyzer.count_words(). Lưu ý rằng nếu không gian tên cục bộ đã tồn tại một hàm trùng tên, hàm mới import sẽ ghi đè lên hàm cũ.

Import toàn bộ (Wildcard)

from text_analyzer import *

Dấu * sẽ nạp tất cả các đối tượng công khai (những tên không bắt đầu bằng dấu gạch dưới _) vào không gian tên hiện tại. Module gốc (text_analyzer) sẽ không được định nghĩa trong namespace cục bộ.

Nguyên tắc và Best Practices:

  • Dùng from module import func: Khi bạn cần gọi một hàm rất nhiều lần và muốn mã nguồn ngắn gọn, hoặc khi bạn chỉ cần một vài chức năng cụ thể.
  • Dùng import module: Khi module có các hàm trùng tên với module khác hoặc trùng với biến cục bộ để tránh xung đột không gian tên.
  • Hạn chế tối đa import *: Việc này làm ô nhiễm không gian tên cục bộ, khiến việc debug trở nên khó khăn vì không thể truy vết nguồn gốc của một hàm, đồng thời làm giảm tính rõ ràng của mã nguồn.

3. Import động bằng hàm built-in (Dynamic Import)

Ngoài các từ khóa import thông thường, Python cung cấp hàm tích hợp sẵn __import__() cho phép import module một cách linh hoạt. Điểm khác biệt lớn nhất là tham số truyền vào là một chuỗi (string), rất hữu ích khi tên module được xác định lúc runtime (ví dụ: đọc từ file cấu hình hoặc kết quả của một biểu thức).

module_name_str = "text_analyzer"
dynamic_module = __import__(module_name_str)

# Gọi hàm thông qua biến dynamic_module
dynamic_module.count_words("sample text")

4. Làm việc với Package và Submodule

Một package (gói) trong Python thực chất là một thư mục chứa nhiều module, giúp tổ chức không gian tên thành cấu trúc phân cấp. File code của module thường được đặt trong các thư mục nằm trong PYTHONPATH.

Import submodule bằng tên đầy đủ

import media.audio.reverb

# Gọi hàm với đường dẫn đầy đủ
media.audio.reverb.apply_effect(audio_stream, decay=0.8, mix=0.5)

Import submodule trực tiếp

from media.audio import reverb

# Gọi hàm ngắn gọn hơn
reverb.apply_effect(audio_stream, decay=0.8, mix=0.5)

Việc sử dụng from package import specific_submodule được khuyến khích vì nó cân bằng được sự ngắn gọn và tính rõ ràng, đặc biệt khi làm việc với các package có cấu trúc phân cấp sâu. Tuyệt đối không nên dùng from package import * vì nó gây rối loạn không gian tên và làm giảm khả năng đọc hiểu của mã nguồn. Trong các dự án thực tế, việc kết hợp linh hoạt giữa import modulefrom package import submodule sẽ giúp tối ưu hóa cấu trúc code mà vẫn đảm bảo tính bảo trì.

Thẻ: python module namespace import package

Đăng vào ngày 21 tháng 9 lúc 21:36