Вот способ автоматического добавления атрибута (с именем _loadtime
в приведенном ниже примере кода) к модулям при их импорте. Код основан на рецепте 10.12 под названием «Исправление модулей при импорте» в книге Дэвида Бизли и Брайана Джоунса, O'Reilly, 2013, Python Cookbook , в которой показан метод, который я изменил, чтобы сделать то, что ты хочешь.
Для тестирования я создал этот простой target_module.py
файл:
print('in target_module')
Вот пример кода:
import importlib
import sys
import time
class PostImportFinder:
def __init__(self):
self._skip = set() # To prevent recursion.
def find_module(self, fullname, path=None):
if fullname in self._skip: # Prevent recursion
return None
self._skip.add(fullname)
return PostImportLoader(self)
class PostImportLoader:
def __init__(self, finder):
self._finder = finder
def load_module(self, fullname):
importlib.import_module(fullname)
module = sys.modules[fullname]
# Add a custom attribute to the module object.
module._loadtime = time.time()
self._finder._skip.remove(fullname)
return module
sys.meta_path.insert(0, PostImportFinder())
if __name__ == '__main__':
try:
print('importing target_module')
import target_module
except Exception as e:
print('Import failed:', e)
raise
print('module loadtime: {}'.format(target_module._loadtime))
Выход:
importing target_module
in target_module
module loadtime: 1559786183.3686578