Các vấn đề thường gặp trong Python - [5] Xung đột tên module trong Python
By JoeVu, at: 14:40 Ngày 14 tháng 1 năm 2023
Thời gian đọc ước tính: __READING_TIME__ phút
![Common Python Problems - [5] Module Name Clash in Python](/media/filer_public_thumbnails/filer_public/63/de/63de961a-f904-4cc3-b586-2fdd1cb1135e/python_mistake_-_module_name_clash_in_python.png__1500x900_q85_crop_subsampling-2_upscale.jpg)
![Common Python Problems - [5] Module Name Clash in Python](/media/filer_public_thumbnails/filer_public/63/de/63de961a-f904-4cc3-b586-2fdd1cb1135e/python_mistake_-_module_name_clash_in_python.png__400x240_q85_crop_subsampling-2_upscale.jpg)
Xung đột tên mô-đun xảy ra khi hai mô-đun khác nhau có cùng tên. Điều này có thể gây ra sự cố khi cố gắng nhập một trong các mô-đun, vì trình thông dịch sẽ không biết nên sử dụng mô-đun nào. Ví dụ: nếu bạn có hai mô-đun được gọi là “client.py”, trình thông dịch sẽ không thể xác định được mô-đun nào cần nhập.
1. Để tránh xung đột tên, điều quan trọng là đặt tên duy nhất cho các mô-đun của bạn.
Ví dụ
libs/
google/
client.py
facebook/
client.py
và có một tập lệnh nhập cả hai client.py
. Sau đó, bạn có thể chỉ cần đặt tên cho chúng khác nhau, và trình thông dịch sẽ không gặp khó khăn trong việc nhận dạng chúng.
libs/
google/
google_client.py
facebook/
facebook_client.py
trong script.py, bạn có thể nhập chúng như
import libs.google.google_client
import libs.facebook.facebook_client
2. Từ khóa "As"
Một cách khác để tránh xung đột tên mô-đun là sử dụng từ khóa “as” khi nhập mô-đun. Điều này cho phép bạn gán một bí danh cho mô-đun được nhập, để trình thông dịch có thể dễ dàng nhận dạng nó. Đây là giải pháp được ưu tiên
Liên quan đến ví dụ trên, chúng ta có thể nhập cả hai mô-đun client như
import libs.google.client as google_client
import libs.facebook.client as facebook_client
Sau đó, trình thông dịch sẽ có thể phân biệt giữa hai mô-đun, vì mỗi mô-đun sẽ có một bí danh khác nhau.
3. Sử dụng "importlib"
Cuối cùng, bạn cũng có thể sử dụng mô-đun “importlib” để tải mô-đun động. Điều này cho phép bạn tải mô-đun vào thời gian chạy, có nghĩa là bạn có thể tránh bất kỳ vấn đề tiềm ẩn nào với xung đột tên mô-đun.
Cùng vấn đề ở trên, chúng ta có thể làm
import importlib
google_client = importlib.import_module('libs.google.client')
facebook_client = importlib.import_module('libs.facebook.client')
Sau đó, trình thông dịch sẽ có thể phân biệt giữa hai mô-đun, vì mỗi mô-đun sẽ có một tên duy nhất.
Tóm lại, điều quan trọng là phải nhận thức được khả năng xảy ra xung đột tên mô-đun khi lập trình bằng Python. Bằng cách đặt tên duy nhất cho các mô-đun của bạn, sử dụng từ khóa “as” khi nhập và sử dụng mô-đun “importlib” để tải mô-đun động, bạn có thể tránh bất kỳ vấn đề tiềm ẩn nào.