Как сказать, что если модули Python я reload () редактировать из модуля - PullRequest
1 голос
/ 18 мая 2011

При написании модуля Python, есть ли способ узнать, импортируется или перезагружается модуль?

Я знаю, что могу создать класс, и __init__() будет вызываться только при первом импорте, но я не планировал создавать класс. Тем не менее, я сделаю это, если не будет простого способа определить, импортируем ли мы или перезагрузим.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Документация для reload() фактически дает фрагмент кода, который, как мне кажется, должен работать для ваших целей, по крайней мере, в обычном случае.Вы бы сделали что-то вроде этого:

try:
    reloading
except NameError:
    reloading = False # means the module is being imported
else:
    reloading = True # means the module is being reloaded

Что это действительно делает, так это определяет, импортируется ли модуль «чисто» (например, в первый раз) или перезаписывает предыдущий экземпляр того же модуля.В обычном случае «чистый» импорт соответствует оператору import, а «грязный» импорт соответствует reload(), поскольку import действительно импортирует модуль только один раз, при первом его выполнении (для каждого данногомодуль).

Если вам каким-то образом удается заставить последующее выполнение оператора import выполнить что-то нетривиальное, или если вам каким-то образом удается впервые импортировать свой модуль с помощью reload(), или если вывозиться с механизмом импорта (через модуль imp или тому подобное), все ставки отключены.Другими словами, не рассчитывайте на то, что всегда работает в любой возможной ситуации.

PS Тот факт, что вы задаете этот вопрос, заставляет меня задуматься, делаете ли вы что-то, что вы, вероятно,не должен делать, но я не буду спрашивать.

0 голосов
/ 18 мая 2011
>>> import os
>>> os.foo = 5
>>> os.foo
5
>>> import os
>>> os.foo
5
...