如何在主脚本和其他类之间共享类实例? 我只需要初始化一次类实例,并在各处使用它。
我有这样的错误:
NameError:名称“ logger”未定义
这是我的项目结构:
project
|
|- classes
| |
| |-loggerClass.py
| |-workerClass.py
|
|-main.py
这是我要构建的简化代码:
loggerClass.py:
class loggerClass():
def __init__(self):
filename = os.path.join(PARAM['LOG_DIR'], datetime.datetime.today().strftime('%Y-%m-%d')+'.log')
self.logFile = open(filename, 'a')
def write(self, message):
line = datetime.datetime.today().strftime('%Y-%m-%d %H:%M')+"\t" + message
self.logFile.write(line)
def __del__(self):
print("============== CLOSE LOG FILE ===================")
self.logFile.close()
workerClass.py:
class workerClass():
def __init__(self):
global logger
logger.write("Worker initiated")
def doSomethingUseful():
pass
main.py:
from classes.workerClass import workerClass
from classes.loggerClass import loggerClass
logger = loggerClass()
worker = workerClass()
logger.write("END of the process") # I need to use the same "logger" instance everywhere
答案 0 :(得分:2)
如果您只想使用loggerClass
的一个实例,则甚至不需要导入loggerClass
-仅导入该实例。
因此,与其在模块loggerClass
中仅包含loggerClass
,然后在main
中进行此操作,
from classes.loggerClass import loggerClass
logger = loggerClass()
您应将logger = loggerClass()
行放在loggerClass
模块中,然后在main
中这样做:
from classes.loggerClass import logger
或者,在模块中创建一个get_logger()
函数,如果该编码风格更适合您,则该函数始终返回相同的logger实例。从功能上讲,它是相同的。
顺便说一句,代码中的命名惯例非常糟糕。帮个忙,阅读PEP-8,特别是:
loggerClass
-命名为Logger
loggerClass
-例如,将其命名为logger
,如果没有更好的名字classes
,因为它只是一个不好的名字