如何重写导入的Python模块中的常量?

2024-05-15 22:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,我正在使用名为examplemod的包example中的模块。

我的应用程序:

from example import examplemod
examplemod.do_stuff()

它像这样在example中导入另一个模块。

示例mod.py:

from example import config
# uses config
# then does stuff

config使用常量。

配置py:

CONSTANT = "Unfortunate value"

当我在应用程序中使用examplemod(将其设置为CONSTANT = "Better value")时,我希望重写此常量,并且我不希望修改底层模块,这样就不必维护自己的包。我该怎么做?


Tags: 模块frompyimportmodconfig应用程序示例
3条回答

是的,但它只能在完全限定的模块访问路径下正常工作:

import example
example.examplemod.config.CONSTANT = "Better value"
example.examplemod.do_stuff()

这被称为monkey patching,如果有其他方法来完成相同的任务,这是相当常见的,但不是首选:

examplemod.config.CONSTANT = "Better value"

问题是,您依赖于examplemodconfig的内部保持不变,因此如果任何一个模块发生更改,这可能会中断。

谢谢大家的回答。他们给我指出了正确的方向,尽管他们没有一个像书面上写的那样工作。我最后做了以下事情:

import example.config
example.config.CONSTANT = "Better value"

from example import examplemod
examplemod.do_stuff()
# desired result!

(同时,我正在向模块维护人员提交一个补丁,使常量成为一个可配置的选项,因此我不必这样做,但同时需要安装库存模块。)

相关问题 更多 >