导入后更改的导入变量

Import variable that changes after import

我有一个模块负责日志记录并为其他一些模块提供一个记录器变量:

log_module.py

my_logger = None

def init_var(program_args):
    my_logger = logging.getLogger(program_args.something)

记录器最初是 None,但会在程序的早期初始化(尽管在所有导入之后)。

当其他模块导入记录器时,它还没有被初始化,因此是None

from log_module import my_logger
print(my_logger) // None

当从 log_module 中更改 my_logger 时,它不会影响导入的变量,因为它驻留在导入模块的全局命名空间中。

我可以 import log_module 然后写 log_module.my_logger.log("...") 但这会变得很长。

是否有另一种方法来使用模块中的变量,该变量在导入后会发生变化?

我认为你最好改变你的方法。 也许有一些 class 是单例,存储变量的值,这样当实际需要变量时,它是从 class 中获取的,而不是从导入中获取的。

在模块 B 中使用模块 A 中配置的记录器时,您只需在程序中需要它的位置获取具有正确名称的记录器。模块 B 内:

logging.getLogger(program_args.something)

不要从模块 A 重新导入记录器。

如果您无权访问 program_args.something,您可能需要想一个更好的名称:您的记录器可能不需要那么灵活的名称。

还要考虑包内的记录器命名空间:例如,名为 'module.submodule.subsubmodule' 的记录器仍会从名为 'module' 的记录器中获取配置。