Get in touch
or send us a question?
CONTACT

File __init__.py trong Python: Hướng dẫn sử dụng toàn diện

__init__.py không chỉ đơn thuần là một file đánh dấu package, nó quyết định cách package của bạn được cấu trúc, import và tối ưu ra sao

__init__.py không chỉ đơn thuần là một file đánh dấu package, nó quyết định cách package của bạn được cấu trúc, import và tối ưu ra sao. Làm chủ __init__.py—tức là hiểu về quá trình khởi tạo package Python—sẽ giúp bạn xây dựng các dự án Python có cấu trúc rõ ràng, dễ bảo trì, dù đó chỉ là một package tiện ích nhỏ hay một framework quy mô lớn. Hiểu sâu về file này là điều then chốt, dù bạn đang phát triển module nhỏ hay ứng dụng lớn, bây giờ hãy cùng mình bắt đầu thôi.

1. Làm quen với Package và__init__.py

Trước khi tìm hiểu sâu về __init__.py, hãy tìm hiểu nhanh package là gì trong Python.

Package là một cách tổ chức các file mã nguồn (module) trong Python thành từng nhóm có liên hệ với nhau. Nói đơn giản, nó giống như một thư mục chứa nhiều file Python, giúp quản lý code tốt hơn khi dự án lớn lên.

Ví dụ: Bạn có một package tên là my_package, bên trong chứa các file như module1.pymodule2.py… Package giúp bạn phân chia chức năng đâu ra đấy, dễ tìm, dễ quản lý.

Làm sao để Python biết đây là một package? Chỉ cần một file đặc biệt tên là __init__.py để đánh dấu thư mục này là một package. Nếu không có file này, Python sẽ không nhận diện được đây là package!

Trường hợp đơn giản nhất: File __init__.py có thể hoàn toàn RỖNG. Khi mới tạo package Python, bạn thường sẽ:

  • Đánh dấu package: Chỉ cần file __init__.py là được.
  • Import cơ bản: Import các module hay dùng và expose chúng ở cấp package.
  • Quản lý version: Lưu thông tin phiên bản package.
  • Thông tin tác giả: Gắn metadata về creator/package maintainer.

my_package/
├── init.py
├── module1.py
└── module2.py

2. Quản lý Import và Export

Khi khởi tạo package, bạn cần kiểm soát những gì người dùng có thể truy cập khi họ import package của bạn. Đặc biệt, bạn có thể quyết định những gì sẽ được “export” (đưa ra ngoài) khi người dùng dùng lệnh from your_package import *.

Để làm được điều này, Python cung cấp một danh sách đặc biệt tên là __all__. Biến này sẽ chỉ định rõ những module, class, hàm hoặc biến nào sẽ được export ra ngoài khi import bằng dấu “*”. (Dù thực tế, bạn không nên dùng from package import *, nhưng hiểu cách nó hoạt động rất quan trọng.)

Các kỹ thuật quan trọng bao gồm:

  • Export có kiểm soát qua __all__
  • Lựa chọn chỉ import những phần cần thiết từ các submodule
  • Khai báo hằng số (constant) ở cấp package
  • Giữ namespace của package luôn gọn gàng, rõ ràng