Mặc dù các câu trả lời được cung cấp có tác dụng với một mô-đun cụ thể, nhưng chúng sẽ không tải lại các mô hình con, như đã lưu ý trong Câu trả lời này :
Nếu một mô-đun nhập các đối tượng từ một mô-đun khác bằng cách sử dụng from ... import ...
, việc gọi reload()
cho mô-đun khác không xác định lại các đối tượng được nhập từ mô-đun này - một cách khác là thực hiện lại câu lệnh from, thay vào đó là sử dụng import
tên và đủ điều kiện ( module.*name*
).
Tuy nhiên, nếu sử dụng __all__
biến để xác định API công khai, có thể tự động tải lại tất cả các mô-đun có sẵn công khai:
# Python >= 3.5
import importlib
import types
def walk_reload(module: types.ModuleType) -> None:
if hasattr(module, "__all__"):
for submodule_name in module.__all__:
walk_reload(getattr(module, submodule_name))
importlib.reload(module)
walk_reload(my_module)
Mặc dù vậy, các lưu ý trong câu trả lời trước vẫn còn hiệu lực. Đáng chú ý, việc sửa đổi một mô hình con không phải là một phần của API công khai như được mô tả bởi __all__
biến sẽ không bị ảnh hưởng bởi tải lại khi sử dụng chức năng này. Tương tự, việc loại bỏ một phần tử của mô hình con sẽ không được phản ánh bằng tải lại.