我没有找到,如何在其他文件中覆盖函数中的变量。
我有2个文件 - config.py
和first.py
:
config.py
:
import logbook
import sys
from pyfancy.pyfancy import pyfancy
log = logbook.Logger("config")
logbook.StreamHandler(sys.stdout,
level=logbook.DEBUG).push_application()
def green_foreground(coloredtext):
log.debug(pyfancy().green().bold(coloredtext))
first.py
:
import logbook
from config import green_foreground
log = logbook.Logger("first")
green_foreground("Sasha Champion!")
我在控制台中运行:
python first.py
我想,log
变量:
log = logbook.Logger("first")
- first.py
,log = logbook.Logger("second")
- 在second.py
等等。D:\PyfancyRefactoring>python first.py
[2018-01-25 16:54:25.469005] DEBUG: first: Sasha Champion!
来自log
文件的config.py
变量的值。
D:\PyfancyRefactoring>python first.py
[2018-01-25 16:54:25.469005] DEBUG: config: Sasha Champion!
例如,我添加到config.py
:
if __name__ == 'config':
log = logbook.Logger("config")
else:
log = logbook.Logger("first")
我得到的是实际行为,而不是预期的行为。
green_foreground
函数,但它会有很多重复的代码,我认为这不是一个好习惯。答案 0 :(得分:1)
配置文件创建一个名为config
的记录器,并且函数green_foreground记录到该记录器。它是硬编码的 - 在任何时候你都不告诉green_foreground函数在其他地方记录,它不知道在first.py中创建的日志。
运行first.py时,python会创建两个不同的log
实例。您可以修改green_foreground函数以接受log
实例作为参数,默认为config
中的一个创建者,或者:
更改config.py
以记录此内容:
log = logbook.Logger(__name__)