Как работает функция 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
Time to yourself🧘♀️
Indulge in a 45-minute grounding meditation, harmonising your being and cultivating a deep sense of peace and renewal within.
🗓️ Tomorrow, May 14
🕖 7 am - 7.50am
📍Seminyak, at Sunset Park Pool Bar, Level 4, Potato Head Studios
Bookings via the link.
@BaliNews
#wheretogo#Seminyak
🤠Annual Cinco De Mayo party at Motel Mexicola
🪩 Today from 6pm till the late night you can try to win IDR 10 million in Reggaeton Dancing Competition.
🍸 DJs, dancers and good vibes are expected in Seminyak tonight.
@BaliNews
#Seminyak#wheretogo
🤕Two foreigners beat up the Pechalangs at a villa in Seminyak
Kuta police have detained two US citizens, 26-year-old Aabed Attia and his older brother 30-year-old Zeyad Ahmed Attia. According to law enforcers, the Americans beat up two pechalangs (local vigilantes) at a rented villa in Seminyak after being reprimanded over loud music. The foreigners are now in a detention center, awaiting trial.
@BaliNews
#accidents#Kuta#Seminyak
😱 А very impressive python crawled onto Seminyak beach for a rest yesterday
🐍 It was not allowed to rest, though – despite its status as a public beach, the snake was politely but firmly asked to leave.
@BaliNews
#places#incidents#Seminyak
🏚Fire destroys 19 villas in Seminyak
📰 Detikbali reports the the blaze broke out overnight on Kayu Aya Street in the Amasya villa complex. The fight against the fire continued into the morning. The flames were so big that they were seen even from airplanes arriving in Bali.
🎍 Apparently, the reason is that the complex is mostly built in eco-style, a lot of materials such as bamboo and straw were used in the decoration and construction, and they are known to burn well.
💸 Damage from the fire is estimated at 12 billion rupees.
👮♂️ Ketut Sukadi, a spokesman for Denpasar police's public relations department, said:
“The fire first appeared on the second floor of villa 9 of The Amasya Villas complex, then spread to villa 12. A total of 19 villas out of 20 were burned in the fire, only villa 5 was not burned.”
There are no official reports on the cause of the fire or other details yet, authorities are still investigating the incident.
@BaliNews
#accidents#Seminyak#Denpasar