Bài 13 – Module Và Package Trong Python

Giới thiệu: Khi phát triển các ứng dụng phức tạp, việc tổ chức code thành các module và package là rất quan trọng. Module và package giúp chia nhỏ code thành các phần có thể tái sử dụng, dễ bảo trì và quản lý.

Mục tiêu bài học:
– Hiểu khái niệm module và package trong Python
– Biết cách tạo và sử dụng module
– Nắm vững cách tổ chức package
– Sử dụng được các module có sẵn trong Python
– Hiểu và sử dụng được __init__.py trong package


1. Module Là Gì?

Định nghĩa: Module là một file chứa mã Python (có đuôi .py) bao gồm các hàm, lớp và biến. Module giúp tổ chức code một cách logic và tái sử dụng.

Ví dụ 1.1: Tạo một module

  • Tạo file math_operations.py với nội dung:
# math_operations.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b != 0:
        return a / b
    else:
        return "Lỗi: Chia cho 0"

Sử dụng module:

# main.py
import math_operations

print(math_operations.add(5, 3))
print(math_operations.multiply(2, 4))

2. Các Cách Import Module

Import toàn bộ module:

import math_operations

Import với tên alias:

import math_operations as mo
print(mo.add(2, 3))

Import chỉ các hàm cụ thể:

from math_operations import add, multiply
print(add(2, 3))
print(multiply(2, 3))

Import tất cả hàm từ module:

from math_operations import *

3. Package Là Gì?

Định nghĩa: Package là một thư mục chứa nhiều module và một file __init__.py. Package giúp tổ chức các module thành các nhóm chức năng.

Cấu trúc package:

my_package/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py

Ví dụ 3.1: Tạo một package

  • Tạo thư mục shapes
  • Trong thư mục shapes, tạo file __init__.py (có thể để trống)
  • Tạo các module: circle.py, rectangle.py

Nội dung module circle.py:

# shapes/circle.py

def area(radius):
    return 3.14 * radius * radius

def circumference(radius):
    return 2 * 3.14 * radius

Nội dung module rectangle.py:

# shapes/rectangle.py

def area(length, width):
    return length * width

def perimeter(length, width):
    return 2 * (length + width)

Sử dụng package:

# main.py
from shapes import circle, rectangle

print("Diện tích hình tròn:", circle.area(5))
print("Diện tích hình chữ nhật:", rectangle.area(4, 6))

4. File __init__.py

File __init__.py được sử dụng để khởi tạo package. Nó có thể:

  • Chứa mã khởi tạo cho package
  • Định nghĩa danh sách các module được import khi sử dụng from package import *

Ví dụ 4.1: Sử dụng __init__.py

# shapes/__init__.py

from .circle import area as circle_area
from .rectangle import area as rectangle_area

__all__ = ['circle', 'rectangle']

5. Các Module Tiêu Chuẩn Của Python

Python có sẵn nhiều module tiêu chuẩn (standard library) hữu ích.

Ví dụ 5.1: Module math

import math

print(math.sqrt(16))    # 4.0
print(math.pi)          # 3.141592653589793
print(math.factorial(5)) # 120

Ví dụ 5.2: Module datetime

import datetime

now = datetime.datetime.now()
print("Hiện tại:", now)

today = datetime.date.today()
print("Hôm nay:", today)

Ví dụ 5.3: Module random

import random

print(random.randint(1, 100))  # Số ngẫu nhiên từ 1 đến 100
print(random.choice(['apple', 'banana', 'orange']))  # Chọn ngẫu nhiên

6. Module sys Và os

Module sys:

import sys

print("Phiên bản Python:", sys.version)
print("Đường dẫn module:", sys.path)

Module os:

import os

print("Thư mục hiện tại:", os.getcwd())
print("Danh sách file trong thư mục:", os.listdir('.'))

7. Tạo Và Sử Dụng Module Trong Các Dự Án Lớn

Cấu trúc dự án mẫu:

my_project/
    main.py
    utils/
        __init__.py
        file_utils.py
        math_utils.py
    models/
        __init__.py
        user.py
        product.py

Ví dụ 7.1: Module file_utils.py

# utils/file_utils.py

def read_file(filename):
    with open(filename, 'r') as file:
        return file.read()

def write_file(filename, content):
    with open(filename, 'w') as file:
        file.write(content)

Ví dụ 7.2: Module user.py

# models/user.py

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email
    
    def display_info(self):
        return f"User: {self.name}, Email: {self.email}"

Sử dụng trong main.py:

# main.py
from utils.file_utils import read_file, write_file
from models.user import User

# Sử dụng file_utils
content = read_file('data.txt')
write_file('output.txt', content.upper())

# Sử dụng user
user = User("Alice", "alice@example.com")
print(user.display_info())

Bài Tập Thực Hành (Tự Giải)

Bài 1: Tạo một module string_utils chứa các hàm xử lý chuỗi (đảo ngược, đếm từ, …)

Bài 2: Tạo package geometry chứa các module circle, rectangle, triangle với các hàm tính diện tích và chu vi

Bài 3: Sử dụng module datetime để viết chương trình hiển thị thời gian hiện tại và tính tuổi

Bài 4: Tạo module calculator với các phép toán cơ bản và sử dụng nó trong chương trình chính

Bài 5: Tạo package bank với module account (quản lý tài khoản) và transaction (quản lý giao dịch)

Bài 6: Sử dụng module random để tạo chương trình xổ số ngẫu nhiên

Bài 7: Tạo module config để đọc cấu hình từ file và sử dụng trong các module khác

Bài 8: Tạo package school với các module student, teacher, course và sử dụng trong chương trình quản lý trường học

Bài 9: Sử dụng module os để liệt kê tất cả file .py trong một thư mục

Bài 10: Tạo module logger để ghi log và sử dụng trong các module khác

Lưu Ý Quan Trọng

  1. Đặt tên module và package: Tên nên ngắn gọn, rõ ràng và sử dụng chữ thường
  2. Tránh xung đột tên: Không đặt tên module trùng với tên module chuẩn
  3. Sử dụng __init__.py: Để định nghĩa package và khởi tạo
  4. Tổ chức code hợp lý: Nhóm các chức năng liên quan vào cùng module/package
  5. Documentation: Thêm docstring cho module và hàm để dễ bảo trì

Tóm Tắt

  • Module là file .py chứa mã Python, giúp tái sử dụng code
  • Package là thư mục chứa nhiều module, tổ chức code thành nhóm
  • Cách import linh hoạt: import toàn bộ, import có chọn lọc
  • Module chuẩn của Python cung cấp nhiều chức năng hữu ích
  • Tổ chức code bằng module và package giúp dự án dễ bảo trì và mở rộng

BÀI HỌC TIẾP THEO (LẬP TRÌNH PYTHON NÂNG CAO) – Lập trình Hướng đối tượng ….. sẽ được biên soạn tiếp trong thời gian tới. …..

Comments are closed.