【发布时间】:2020-04-30 13:36:52
【问题描述】:
我在logger.py 中有多个实例化的记录器类,我将它们导入到多个其他模块中。
logger.py
class Logger:
def __init__(self, name='default'):
# create a Logger with custom handlers
# ...
main_logger = Logger('main_logger')
another_topic_logger = Logger('another_topic_logger')
module_a.py
from logger import main_logger
main_logger.info('hello!')
Python 如何在后台处理它?我需要一个单例包装器还是这样就可以了?
【问题讨论】:
-
你并不能真正告诉人们,“这个问题是有话题的”。这完全取决于阅读问题的人。我已经删除了那部分,因为我认为它可能会让人们对你的问题产生偏见。
-
您可以尝试在模块中使用
id(main_logger)来查看您是否使用相同的实例。通常 Python 会记住导入的模块,它不会再次导入它,但它使用了已导入的代码 - 但我不确定如果你在其他模块中导入相同的模块是否属实。 -
也许我被这个名字误导了,但你为什么要定义自己的
Logger类而不是使用logging模块? (顺便说一下,这不会让你直接实例化 itsLogger类;你调用一个名为getLogger的模块级函数,它会根据参数创建一个新实例或返回现有实例。) -
@larsks 这并不是要决定一个意见,而是要澄清我在问这个问题之前考虑过这个问题,因为它很容易被误解。
-
另外,您有多个
Logger类实例;仅导入其中一个实例的另一个模块不会使任何东西成为单例。
标签: python python-3.x oop design-patterns