Mô tả
__import__() là hàm low-level dùng bởi statement import. Cho phép import module tại runtime với tên động.
Cú pháp
__import__(name, globals=None, locals=None, fromlist=(), level=0)
name: Tên module (string).globals/locals: Context để resolve relative imports.fromlist: List tên submodule/object cần import (gợi ý tối ưu).level: 0=absolute, >0=relative (số dấu chấm).
Ví dụ cơ bản
# Import datetime module
dttime = __import__('datetime', globals(), locals(), [], 0)
print(dttime.datetime.now()) # 2021-01-12 07:38:54.903330
# Tạo bản sao và dùng
x = dttime.datetime.now()
print(x.strftime("%d-%B")) # 12-January
Import submodule/from ... import
# import os.path
os_path = __import__('os.path', globals(), locals(), ['path'], 0)
print(os_path.path.join('a', 'b')) # a/b
# from json import dumps
json_mod = __import__('json', globals(), locals(), ['dumps'], 0)
print(json_mod.dumps({'a': 1})) # {"a": 1}
Import động với tên biến
module_name = 'math'
mod = __import__(module_name)
print(mod.sqrt(16)) # 4.0
# Plugin system pattern
plugins = ['plugin_a', 'plugin_b', 'plugin_c']
for name in plugins:
try:
plugin = __import__(f'myapp.plugins.{name}', fromlist=[name])
plugin.register()
except ImportError:
print(f"Plugin {name} not found")
Lưu ý & Khuyến nghị
⚠️ Không khuyến khích dùng __import__() trực tiếp.
- Khó đọc, khó debug, dễ gây bug.
- Thay vào đó dùng
importlib.import_module()(Python 3.1+):
import importlib
# Cách chuẩn hiện đại
mod = importlib.import_module('datetime')
print(mod.datetime.now())
# Import từ string variable
module_name = 'os.path'
mod = importlib.import_module(module_name)
print(mod.join('a', 'b'))
So sánh
| Đặc điểm | __import__() | importlib.import_module() |
|---|---|---|
| API | Low-level, phức tạp | High-level, đơn giản |
| Relative import | level parameter | package parameter |
| Trả về | Top-level module | Module được import |
| Khuyên dùng | Không | Có |