Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm __import__() trong Python: Import động module

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()
APILow-level, phức tạpHigh-level, đơn giản
Relative importlevel parameterpackage parameter
Trả vềTop-level moduleModule được import
Khuyên dùngKhôngCó