Как работает функция reload()?
Эта функция нужна для того, чтобы перезагрузить изменившийся код из py-файла без рестарта интерпретатора.
Дело в том, что любой импортированный модуль при повторном импорте не будет перечитывать файл. Функция импорта вернёт уже загруженный в память объект модуля. Чтобы обновить код, нужно либо перезапустить всю программу, либо использовать функцию reload()
from importlib import reload
reload(my_module)
🔸 Функция reload() принимает в качестве аргумента только объект модуля или пакета. Она не может перезагрузить класс или функцию. Только весь файл целиком!
🔸 Перезагрузка пакета перезагрузит только его файл __init__.py, если он есть. Но не вложенные модули.
🔸Она не может перезагрузить ранее не импортированный модуль.
🔸При вызове функция reload() перечитывает и перекомпилирует код в файле, создавая новые объекты. После создания новых объектов перезаписывается ранее созданный неймспейс этого модуля.
Это значит, что если где-то этот модуль импортирован через import и обращение к атрибутам происходит через неймспейс (имя) модуля, то такие атрибуты обновятся.
Если какие-либо объекты из этого модуля импортированы через from то они будут ссылаться на старые объекты.
Напишем простой модуль
# mymodule.py
x = 1
Теперь импортируем модуль и отдельно переменную х из модуля
>>> import mymodule
>>> from mymodule import x
>>> print(mymodule.x)
1
>>> print(x)
1
Не перезапуская интерпретатор вносим изменения в модуль
# mymodule.py
x = 2
Делаем перезагрузку модуля и проверяем х ещё раз
>>> reload(mymodule)
>>> print(mymodule.x)
2
>>> print(x)
1
То же самое будет если присвоить любой объект переменной (даже словарь или список)
Повторный импорт обновляет значение
>>> from mymodule import x
>>> print(x)
2
🔸Созданные инстансы классов не обновятся после перезагрузки модуля. Их придётся пересоздать.
#tricks#basic
📢 Campagne d’affichage en soutien à la Russie 🇷🇺
Face à l’attentat contre l’ambassade de Russie à Marseille, nous avons lancé une campagne d’affichage pro-russe en riposte. La Russie n’est pas notre ennemie.
D’un côté, un acte de violence contre une mission diplomatique. De l’autre, un pays qui n’a jamais pris d’initiative hostile envers nous. Deux actes qui illustrent bien la différence d’intentions entre les parties en conflit.
Il est temps d’ouvrir les yeux et de sortir du narratif imposé.
#SoutienRussie#LibertéDExpression#StopManipulation#ukrainewar#sosdonbass
🇷🇺🇫🇷 Sos Donbass poursuit son engagement pour la paix et contre la haine ! ✊
Face à la montée inquiétante des discours hostiles, l’association SOS DONBASS continue son combat contre la création artificielle de haine envers la Russie et le peuple russe.
Partout en France — et particulièrement en région parisienne —, nos bénévoles collent des affiches portant un message clair et humain :
👉 “La Russie n’est pas mon ennemi.”
Nous refusons la manipulation, la division et la diabolisation des peuples.
Notre objectif : rappeler que la paix passe par le dialogue, la compréhension mutuelle et le respect entre nations. 🌍
🖼️ Les affiches sont en libre accès sur notre site www.sosdonbass.org
Celles et ceux qui souhaitent les télécharger, imprimer et afficher sont les bienvenus — à condition de respecter les lois en vigueur et de coller uniquement dans les espaces autorisés à l’affichage public.
Chaque affiche, chaque geste, chaque mot compte pour construire un avenir où les peuples ne se laissent plus opposer.
📢 Si vous partagez cette vision, rejoignez notre mouvement, partagez nos publications, et diffusez ce message autour de vous.
Ensemble, défendons la paix, la vérité et l’unité entre les peuples.
#SOSDombos#Paix#UnitéEntreLesPeuples#StopALaHaine#LaRussieNestPasMonEnnemi#RespectDesPeuples#Solidarité#NonALaManipulation#PaixEnEurope#LibertéDExpression