Package trong Python

Trong bài trước bạn đã tìm hiểu về module, cách tạo và gọi một module trong Python. Ở bài này, chúng ta sẽ học cách phân chia code thành những module hiệu quả, rõ ràng, sử dụng các package trong Python. Thêm nữa là cách để nhập và sử dụng package của riêng bạn, hoặc package bạn tải về từ đâu đó vào chương trình Python.

Package trong Python là gì?

Thông thường người dùng không lưu trữ tất cả các file của mình trên máy tính ở cùng một thư mục, vị trí, mà sử dụng hệ thống phân cấp thư mục để truy cập dễ dàng hơn. Các tệp tương tự hoặc cùng liên quan đến một chủ đề nào đó sẽ được để trong cùng một thư mục, chẳng hạn các bài học về hàm Python sẽ lưu trong thư mục hàm Python. Tương tự như vậy, Python có các package cho thư mục và module cho file.

Khi chương trình đang code ngày càng lớn với rất nhiều module, chúng ta sẽ đặt những module giống nhau vào một package, và những nhóm module khác vào package khác. Điều này giúp dễ dàng quản lý chương trình hơn và nó cũng dễ hiểu hơn.

Nếu như thư mục có thể chứa các thư mục con thì package cũng vậy, trong một package có thể có package con và các module khác.

Một thư mục phải chứa file có tên __init__.py để Python hiểu thư mục này là một package. File này có thể để trống, nhưng thông thường các lập trình viên thường đặt code khởi tạo cho package ở đây.

Giả sử, ta đang phát triển chương trình có tên QTM, với các package con, module như sau:

Cấu trúc package trong Python

Nhập module từ package trong Python

Ta có thể nhập các module từ package sử dụng toán tử dấu chấm (.).

Ví dụ, nếu muốn nhập module mo.py trong ví dụ trên, bạn làm như sau:

import QTM.Video.mo

Nếu trong module mo.py chứa hàm có tên là chon_video(), bạn sẽ phải sử dụng tên đầy đủ để tham chiếu tới nó:

import QTM.Video.mo.chon_video(video1)

Nếu cấu trúc trên dài quá, bạn có thể nhập module mà không cần tiền tố package như sau:

from QTM.Video import mo

Ta có thể gọi hàm đơn giản như sau:

mo.chon_video(video1)

Ngoài ra, còn một cách nữa để chỉ nhập hàm được yêu cầu (lớp hoặc biến) từ module trong 1 package như sau:

from QTM.Video.mo import chon_video

Sau đó, trực tiếp gọi hàm này:

chon_video(video1)

Dù dễ dàng hơn, nhưng cách nhập sau cùng này không được khuyến khích sử dụng. Việc dùng tên đầy đủ sẽ giúp giảm tình trạng nhầm lẫn và tránh bị trùng giữa những định danh giống nhau.

Trong khi nhập các package, Python sẽ tìm kiếm danh sách thư mục được định nghĩa trong sys.path, giống như đường dẫn tìm kiếm module.

Leave a Reply