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

Tải động (dynamically load) class Python từ tên đầy đủ

Python không có hàm built-in nhận fully qualified class name và trả về class. Nhưng ta tự viết hàm helper.

Hàm tải class động

def get_class(class_path):
    \"\"\"
    class_path: 'module.submodule.ClassName'
    \"\"\"
    parts = class_path.split('.')
    module_name = '.'.join(parts[:-1])
    class_name = parts[-1]
    
    module = __import__(module_name, fromlist=[class_name])
    return getattr(module, class_name)

Ví dụ sử dụng

import datetime

# Lấy class datetime.datetime
DateTimeClass = get_class('datetime.datetime')
print(DateTimeClass.now())  # 2024-01-15 10:30:45.123456

Cách hiện đại (Python 3.7+): dùng importlib

import importlib

def get_class_modern(class_path):
    module_name, class_name = class_path.rsplit('.', 1)
    module = importlib.import_module(module_name)
    return getattr(module, class_name)

Ưu điểm importlib: Xử lý import tốt hơn, tránh lỗi submodule.