__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.
__init__.pyTrướ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.py, module2.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ẽ:
__init__.py là được.my_package/
├── init.py
├── module1.py
└── module2.py
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:
__all__You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE