导入后更改的导入变量
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'
的记录器中获取配置。
我有一个模块负责日志记录并为其他一些模块提供一个记录器变量:
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'
的记录器中获取配置。