0
0
Lập trình
NM

Giới thiệu về Module trong Python: Khám Phá và Ứng Dụng

Đăng vào 6 ngày trước

• 6 phút đọc

Giới thiệu về Module trong Python

Module là một chủ đề thú vị! Trong Python, module đóng vai trò quan trọng trong việc tổ chức mã nguồn, giúp tái sử dụng và duy trì mã dễ dàng hơn. Trong bài viết này, chúng ta sẽ cùng nhau khám phá khái niệm module trong Python, cách sử dụng chúng cũng như những lưu ý quan trọng.

Mục lục

  1. Module là gì?
  2. Các loại Module trong Python
  3. Hệ thống tìm kiếm module (sys.path)
  4. Thực hành tốt nhất khi làm việc với Module
  5. Các cạm bẫy phổ biến khi sử dụng Module
  6. Kết luận
  7. Câu hỏi thường gặp

Module là gì?

Trong Python, module được coi là một lớp trung gian giữa các lớp (class) và gói (package). Module cho phép tổ chức mã nguồn thành các phần riêng biệt, dễ dàng quản lý và tái sử dụng. Ví dụ:

Ví dụ không tốt:

python Copy
# MyClass.py
class MyClass:
    def my_method(self):
        print("Xin chào từ MyClass!")

Khi bạn cố gắng sử dụng lớp này trong một script khác, bạn sẽ làm như sau:

python Copy
# class_usage.py
from MyClass import MyClass  # lạ đúng không?

my_instance = MyClass()
my_instance.my_method()

Tại sao đây là một ví dụ không tốt?

  • Đầu tiên, tên file nên được viết theo quy tắc snake_case theo PEP 8, nên nó nên là my_class.py.
  • Thứ hai, bạn đang nhập một lớp từ một file có cùng tên với lớp. Đây không phải là một thực hành tốt trong Python.

Điều này có thể gây nhầm lẫn, đặc biệt nếu bạn đến từ ObjectScript, nơi mà các lớp được định nghĩa trong các file có cùng tên với lớp.

Các loại Module trong Python

Module là file Python

Như chúng ta đã thấy, module có thể là một file Python nhưng không có phần mở rộng .py. Nhưng chờ đã, điều này có nghĩa là một script Python cũng là một module đúng không? Đúng vậy!

Do đó, bạn nên cẩn thận khi nhập một script, vì mã trong script đó sẽ được thực thi. Xem thêm về giới thiệu Python.

Module là thư mục với file __init__.py

Wow, một thư mục có thể là một module? Đúng vậy!

Một thư mục có thể trở thành module nếu nó chứa một file __init__.py. File này có thể rỗng hoặc chứa mã khởi tạo cho module.

Ví dụ:

Copy
src/python/article/
└── my_folder_module/
    ├── __init__.py
    ├── my_sub_module.py
    └── another_sub_module.py
python Copy
# my_folder_module/my_sub_module.py
class MySubModule:
    def my_method(self):
        print("Xin chào từ MySubModule!")
python Copy
# my_folder_module/another_sub_module.py
class AnotherSubModule:
    def another_method(self):
        print("Xin chào từ AnotherSubModule!")
python Copy
# my_folder_module/__init__.py
# File này có thể rỗng hoặc chứa mã khởi tạo cho module.

Trong trường hợp này, my_folder_module là một module và bạn có thể nhập nó như sau:

python Copy
from my_folder_module import my_sub_module, another_sub_module

Nếu bạn định nghĩa một file __init__.py với nội dung sau:

python Copy
# my_folder_module/__init__.py
from .my_sub_module import MySubModule
from .another_sub_module import AnotherSubModule

Bạn có thể nhập nó như sau:

python Copy
from my_folder_module import MySubModule, AnotherSubModule

Bạn thấy sự tinh tế chưa? Bạn có thể nhập các lớp trực tiếp từ module mà không cần chỉ định sub-module, vì file __init__.py được thực thi khi bạn nhập module, và nó có thể xác định những gì có sẵn trong không gian tên của module.

Hệ thống tìm kiếm module (sys.path)

Khi bạn nhập một module, Python tìm kiếm nó trong các thư mục được liệt kê trong sys.path. Đây là danh sách các chuỗi xác định đường dẫn tìm kiếm cho các module.

Bạn có thể xem sys.path hiện tại bằng cách chạy mã sau:

python Copy
import sys
print(sys.path)

Theo mặc định, nó bao gồm thư mục hiện tại và các thư mục khác tùy thuộc vào cài đặt Python của bạn.

Bạn cũng có thể thêm các thư mục vào sys.path trong thời gian chạy, điều này rất hữu ích khi bạn muốn nhập các module từ một vị trí cụ thể. Ví dụ:

python Copy
import sys
sys.path.append('/path/to/your/module')
from your_module import YourClass

sys.path và các thư mục khác

Các thư mục khác trong sys.path thường là:

  • Thư mục chứa script đầu vào (hoặc thư mục hiện tại nếu không có script nào được chỉ định).
  • Thư viện tiêu chuẩn chứa các module tích hợp đi kèm với Python.
  • Thư mục site-packages nơi các gói bên thứ ba được cài đặt.

site-packages

Thư mục site-packages hoạt động như thế nào? Khi bạn cài đặt một gói bằng pip, nó sẽ được cài đặt trong thư mục site-packages, và thư mục này được tự động bao gồm trong sys.path. Điều này cho phép bạn nhập gói mà không cần chỉ định vị trí của nó.

🤨🔍 Nhưng làm thế nào và ở đâu thư mục site-packages được thiết lập và bởi ai?

Thư mục site-packages được tạo ra trong quá trình cài đặt Python và thường nằm trong thư mục lib của cài đặt Python của bạn. Vị trí chính xác phụ thuộc vào hệ điều hành của bạn và cách Python được cài đặt.

Ví dụ, trên một cài đặt Linux thông thường, thư mục site-packages có thể nằm tại:

Copy
/usr/local/lib/python3.x/site-packages

Trên Windows, nó có thể nằm tại:

Copy
C:\Python3x\Lib\site-packages

Khi bạn cài đặt một gói bằng pip, nó sẽ được cài đặt trong thư mục site-packages, cho phép bạn nhập gói mà không cần chỉ định vị trí của nó.

python Copy
import site
print(site.getsitepackages())

🤨🔍 Khi nào và ở đâu trình thông dịch Python đọc file site.py?

File site.py (nằm trong thư viện tiêu chuẩn) được thực thi tự động khi trình thông dịch Python khởi động. Nó chịu trách nhiệm thiết lập thư mục site-packages và thêm nó vào sys.path. File này nằm trong thư viện tiêu chuẩn của cài đặt Python của bạn.

sys.path trong IRIS

Trong IRIS, chúng ta cũng có một file site.py, nằm trong <installation_directory>/lib/python/iris_site.py. File này được thực thi khi bạn khởi động hoặc nhập một script/module trong IRIS, và nó thiết lập sys.path cho bạn.

Tóm lại, file iris_site.py thực hiện các tác vụ sau:

  • giữ thư mục site-packages mặc định
  • thêm thư mục <installation_directory>/lib/python/ vào sys.path
  • thêm thư mục <installation_directory>/mgr/python/ vào sys.path
  • thêm chuỗi cấu hình PythonPath vào sys.path

Thực hành tốt nhất khi làm việc với Module

  • Sử dụng tên file theo quy tắc snake_case để dễ đọc và dễ hiểu.
  • Tránh đặt tên class và file trùng nhau.
  • Luôn kiểm tra sys.path để đảm bảo module của bạn có thể được nhập.

Các cạm bẫy phổ biến khi sử dụng Module

  • Nhập module không tồn tại trong sys.path.
  • Không hiểu cách hoạt động của file __init__.py dẫn đến nhập không đúng.
  • Các vấn đề với phiên bản Python khác nhau và đường dẫn khác nhau.

Kết luận

Một module có thể là:

  • Một file Python (với hoặc không có phần mở rộng .py)
  • Một thư mục với file __init__.py
  • Một script Python (cũng là một module)
  • Nếu bạn không thể nhập một module, hãy kiểm tra xem nó có trong danh sách sys.path không.

Câu hỏi thường gặp

H1: Làm thế nào để tạo một module trong Python?
Để tạo một module, bạn chỉ cần tạo một file Python với các hàm và lớp bạn muốn sử dụng.
H2: Tôi có thể nhập nhiều module cùng một lúc không?
Có, bạn có thể nhập nhiều module bằng cách sử dụng dấu phẩy trong câu lệnh import.
H3: Có cần thiết phải có file __init__.py trong thư mục không?
Không bắt buộc, nhưng nó giúp Python nhận diện thư mục như một module.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào