แม้ว่าคำตอบที่ให้ไว้จะใช้ได้กับโมดูลที่เฉพาะเจาะจง แต่ก็จะไม่โหลด submodules ดังที่ระบุไว้ในคำตอบนี้ :
หากโมดูลนำเข้าวัตถุจากโมดูลอื่นที่ใช้การfrom ... import ...
เรียกreload()
ใช้โมดูลอื่นไม่ได้กำหนดวัตถุที่นำเข้าจากมันอีกวิธีหนึ่งคือดำเนินการคำสั่งจากคำสั่งอีกครั้งหนึ่งคือการใช้import
และชื่อที่ผ่านการรับรอง ( module.*name*
) แทน
อย่างไรก็ตามหากใช้__all__
ตัวแปรเพื่อกำหนด API สาธารณะมันเป็นไปได้ที่จะทำการโหลดโมดูลที่มีอยู่ทั้งหมดโดยอัตโนมัติ:
# 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)
คำเตือนที่ระบุไว้ในคำตอบก่อนหน้านี้ยังคงใช้ได้แม้ว่า ยวดการแก้ไข submodule ที่ไม่ได้เป็นส่วนหนึ่งของ API สาธารณะตามที่อธิบายโดย__all__
ตัวแปรจะไม่ได้รับผลกระทบจากการโหลดซ้ำโดยใช้ฟังก์ชั่นนี้ ในทำนองเดียวกันการลบองค์ประกอบของ submodule จะไม่ส่งผลต่อการโหลดซ้ำ