智能__init __py

问题描述

我已经编写了一个名为global_imports的通用软件包,该软件包已在我的许多应用程序中使用。 在global_imports中,我还为每个应用程序都包含一个params_<app name>.py文件,该文件中包含我特定于每个应用程序的常量。 该软件包作为子模块放置在我的每个应用程序中。即<app name>.global_imports

global_imports.__init__内,我有以下代码块

mainrepo = globals()['__name__']

if mainrepo == 'a.global_imports':
    from .params_a import *
elif mainrepo == 'b.global_imports':
    from .params_b import *

这允许我的应用程序从global_imports中检索其必要的常量。 但这仅在我的应用程序被隔离的情况下有效。

应用程序a中有一个名为filereader的子模块,它需要global_imports.params_a中定义的常量。该子模块a.filereader被作为b克隆到应用程序b.filereader中。

现在,因为globals()['__name__']仅返回其所在的软件包中的global_imports软件包的名称。如果我要运行b.filereader,它将不会导入global_imports.params_ab.filereader要求,但导入global_imports.params_b

是否有一种方法可以检索导入global_imports的程序包的名称? 也就是说,如果我要从global_imports内导入b.filereader,是否有一种方法可以使导入知道是filereader的导入对象?


在上述可行的情况下,我是否最终会同时用bglobal_imports.params_a污染应用程序global_imports.params_b其他部分的全局名称空间?

如果是这样,是否有更好的方法来解决整个问题?我正在寻求在应用程序之间尽可能多地global_imports的可移植性。


一个可预见的解决方案是在global_imports.__init__内定义一个函数,用例将首先导入global_imports然后调用它的函数。但这是不利的,因为有很多遗留代码需要更改

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...