首页 > 解决方案 > 如何在 Python 中正确定义一个跨包全局的变量?

问题描述

有两个文件a.pyb.py具有以下内容按预期工作:

# a.py

import b

def a_logger(msg):
    print("a logger:", msg)

b.run()

b.set_logger(a_logger)
b.run()
# b.py

def b_logger(msg):
    print("b logger:", msg)

def set_logger(logf):
    global b_logger
    b_logger = logf

def run():
    b_logger('hello world!')

印刷

b logger: hello world!
a logger: hello world!

移入b.py模块也可以。但是,当按如下方式组织为一个包时,它会中断:

# aa.py
import bb

def a_logger(msg):
    print("a logger:", msg)

bb.run()

bb.set_logger(a_logger)
bb.run()
# __init__.py

from .bb import set_logger
from .cc import run
# bb.py

def _bb_logger(msg):
    print("b logger:", msg)

def set_logger(logf):
    global _bb_logger
    _bb_logger = logf
# cc.py

from .bb import _bb_logger

def run():
    _bb_logger('hello world!')

印刷

b logger: hello world!
b logger: hello world!

显然,cc.py保留自己的_bb_logger. 为什么,以及如何获得预期的行为?


一些观察:

标签: pythonglobal-variablespython-import

解决方案


推荐阅读