06/04/2021, 14:46

Package trong Python: Có gì khác với module - Python căn bản

Trong bài này chúng ta sẽ tìm hiểu package trong Python, đây là phương pháp quản lý các module theo package, giúp việc xây dựng cấu trúc của ứng dụng Python trở nên đơn giản hơn rất nhiều. Trong bài module mình đã hướng dẫn bạn cách tạo một module đơn giản trong Python, và nó nằm cùng cấp thư mục ...

Trong bài này chúng ta sẽ tìm hiểu package trong Python, đây là phương pháp quản lý các module theo package, giúp việc xây dựng cấu trúc của ứng dụng Python trở nên đơn giản hơn rất nhiều.

Trong bài module mình đã hướng dẫn bạn cách tạo một module đơn giản trong Python, và nó nằm cùng cấp thư mục với file chính của chương trình. Giả sử trường hợp bạn tạo ra 100 modules thì phải tạo ra 100 files, như vậy việc quản lý các modules sẽ rất phức tạp.

Để đơn giản hóa thì trong Python xuất hiện thêm khái niệm package. Chi tiết thế nào thì chúng ta cùng tìm hiểu ngay nhé.

1. Package trong Python là gì?

Package là cách tạo ra các gói và mỗi gói sẽ chứa những module liên quan với nhau. Phương pháp này giúp việc phân chia modules trong Python một cách dễ dàng.

Bạn có thể hiểu một package giống như folder trong máy tính vậy. Bên trong folder này có thể chứa thêm một folder khác (tức là package khác), và cũng có thể chứa thêm những file khác (tức là các modules).

Hình ảnh dưới đây là cấu trúc của package Game.

cau truc package python jpg

Như bạn thấy:

  • Bên trong Game có thêm 3 package con là Sound, Image, Level
  • Bên trong 3 package con này chứa các module có liên quan với nhau.

Điều đặc biệt là mỗi package bắt buộc phải có file __init__.py, đây là file được gọi đầu tiên mỗi khi bạn import package nó vào chương trình. Nếu bạn đã học lập trình hướng đối tượng thì file này giống như hàm khởi tạo của một lớp vậy đó.

2. Thực hành tạo một package trong Python

Giả sử mình cần tạo package có tên là Store.

package store JPG

Như bạn thấy trong hình, mình đã tạo một folder Store và một file __init__.py, bây giờ mình sẽ viết code trong file này như sau:

Store/__init__.py
print("Bạn đã load package Store")

Để gọi đến package này trong file helloworld.py thì ta sử dụng lệnh sau

import Store

Chạy lên bạn sẽ nhận được kết quả như sau:

package ket qua 1 JPG

Như vậy đoạn code trong file __init__.py đã tự động được gọi.

3. Tạo module trong Package Python

Để tạo một module nằm trong một package A thì bạn chỉ việc tạo file module_name.py nằm trong thư mục package A là được.

Giả sử mình cần tạo module computer.py nằm trong package Store thì cấu trúc sẽ như sau:

package store 2 JPG

Tạo một hàm trong package computer như sau:

def showComputerMsg(msg):
    print(msg)

Bây giờ để sử dụng package computer trong file helloworld.py thì ta sử dụng lệnh import như sau:

import Store.computer
Store.computer.showComputerMsg('Máy tính của Zaidap.com.net')

Hoặc sử dụng lệnh from ... import như sau:

from Store import computer
computer.showComputerMsg('Máy tính của Zaidap.com.net')

4. Tạo package bên trong một package khác

Package trong Python có thể tạo chồng lên nhau. Ví dụ trong package A bạn muốn chia thành 2 package nhỏ là B và C thì hoàn toàn được, bằng cách sử dụng cấu trúc sub folder như phần 1.

Điều lưu ý duy nhất là mỗi package bắt buộc phải có file __init__.py nhé.

packageA
    __init__.py
    packageB
        __init__.py
    packageC
        __init__.py

Và để truy xuất đến các package này thì chỉ việc sử dụng dấu chấm để nối giữa các package là được.

Ví dụ: Giả sử mình có cấu trúc package như sau trong một ứng dụng Python.

Store
    __init__.py
    Computer
        __init__.py
        Ram
            __init__.py
            raminfor.py

Lúc này để gọi đến module raminfor thì ta sử dụng cú pháp sau:

import Store.Computer.Ram.raminfor

Các cách gọi khác thì tương tự như phần 3 nhé.

Như vậy là qua bài này bạn đã biết cách sử dụng package trong Python rồi nhỉ. Mình hy vọng bạn hiểu được các vấn đề sau:

  • Cách tạo và gọi đến các package
  • Hiểu ý nghĩa của file __init__.py trong Python
  • Và nhiều kiến thức liên quan khác.

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

Cùng chủ đề
0