Так как это только для интерактивного переводчика, я не думаю, что что-то вроде:
def my_reload(mod, name):
reload(mod)
globals()[name] = getattr(mod, name)
myreload(somemodule, "some_function")
было бы ужасно. Это просто перезагружает модуль как обычно, а затем привязывает имя, указывающее на старый объект, к новому объекту. Это должно работать во всех случаях, когда reload
будет работать с самого начала. Кроме того, вы можете запрограммировать его так, чтобы он брал реальный объект и получал имя, используя его атрибут __name__
. Все функции, классы и модули имеют атрибут __name__
, но что-то вроде словаря на уровне модулей - нет, поэтому он не будет таким гибким.
Он не заменит ссылки на объекты, которые существуют, кроме глобального, но не будет reload
, даже если вы изначально обращались к нему с точечным именем. Как только ссылка на объект теряется, мало что можно сделать.