【发布时间】:2015-05-12 12:04:41
【问题描述】:
我的 Python 项目中有以下文件结构:
Main.py
classes
|--- __init__.py
|--- Common.py
|--- Logger.py
|--- Dictionary.py
我正在我的Main 文件中设置Common 类的静态变量:
from classes.Common import Common
# set path to the log file for log output
Common.set_log_file_path(C:\\logging\\output.txt"))
在Common 类中设置:
class Common():
log_file_path = ''
@staticmethod
def set_log_file_path(log_file_path):
Common.log_file_path = log_file_path
现在我从我的Main 文件中实例化一个Logger 对象:
from classes.Logger import Logger
# initiate logger
log = Logger()
Logger 对象从正常工作的 Common 对象读取日志文件路径:
from Common import Common
class Logger():
log_file_path = ''
def __init__(self, log_file_path=''):
# if not specified, take default log file path from Common class
if log_file_path == '':
self.log_file_path = Common.log_file_path
现在问题来了:从我的Main 文件中,我实例化了一个Dictionary 对象:
from classes.Dictionary import Dictionary
# load dictionary
dictionary = Dictionary()
在字典对象中我也想有一个记录器,所以我在那里创建一个:
from Logger import Logger
class Dictionary():
log = Logger()
def __init__(self):
Dictionary.log.info('Dictionary > __init__()')
但是这个不行。不知何故,当 Dictionary 中的 Logger 尝试从 Common 类加载日志文件路径时,它是空的。
为什么会这样?那不应该是相同的Common 类,因此在这里持有相同的静态信息吗?我错过了什么吗?我是否以错误的方式进行导入?
我正在使用 Python 2.6.5,我的导入如下:
Main.py imports Dictionary, Logger, Common
Dictionary.py imports Logger
Logger.py imports Common
Common has no imports
【问题讨论】:
-
您是否在 导入
Dictionary之前设置了路径?依赖于导入顺序或期望某些代码在导入之前运行的代码是调试和维护的噩梦。还要确保您没有循环导入。拥有类级别的后备属性是一个不错的技巧,但恕我直言,这也正是:一个技巧。 -
在任何其他代码之前,我都在顶部包含了 Java,因此我认为应该没问题。我在问题中添加了我的导入结构 - 也没有循环导入。