从另一个文件覆盖函数中的变量

时间:2018-01-25 17:09:14

标签: python python-3.x

1。摘要

我没有找到,如何在其他文件中覆盖函数中的变量。

2。实施例

2.1。构造

我使用logbookpyfancy个模块。

我有2个文件 - config.pyfirst.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!")

3。重现的步骤

我在控制台中运行:

python first.py

4。预期的行为

我想,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!

5。实际行为

来自log文件的config.py变量的值。

D:\PyfancyRefactoring>python first.py
[2018-01-25 16:54:25.469005] DEBUG: config: Sasha Champion!

6。没帮忙

例如,我添加到config.py

if __name__ == 'config':
    log = logbook.Logger("config")
else:
    log = logbook.Logger("first")

我得到的是实际行为,而不是预期的行为。

7。不提供

  1. 我知道我可以在每个文件中定义green_foreground函数,但它会有很多重复的代码,我认为这不是一个好习惯。

1 个答案:

答案 0 :(得分:1)

配置文件创建一个名为config的记录器,并且函数green_foreground记录到该记录器。它是硬编码的 - 在任何时候你都不告诉green_foreground函数在其他地方记录,它不知道在first.py中创建的日志。

运行first.py时,python会创建两个不同的log实例。您可以修改green_foreground函数以接受log实例作为参数,默认为config中的一个创建者,或者:

更改config.py以记录此内容:

log = logbook.Logger(__name__)