如何将选择的对象从各个模块导入__init__.py?

时间:2019-06-11 01:25:30

标签: python import

给出以下软件包:

<!-- background_tint.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/black" android:alpha="0.60"/>
</selector>

<!-- activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:text="Sign in"
        app:backgroundTint="@color/background_tint" />
</LinearLayout>

我想将package/ | |_ __init__.py | |_module1.py | |_c1 # c1 is a string | |_foo # foo is a function | |_bar # bar is a function | |_exports = (c1, foo) # or maybe ('c1', 'foo') ? | |_module2.py |_c2 # c2 is a string |_c3 # c3 is a float |_exports = (c2,) # or maybe ('c2',) ? c1foo导入c2。一种明显的方法是在__init__.py内显式编写导入:

__init__.py

现在,我可以编写以下来源:

from module1 import c1, foo
from module2 import c2

但是,我的目标是使用注册表列表import package print(package.c1) 。我尝试在exports中使用importlib,但无处可去:(

任何帮助都是宝贵的考虑

1 个答案:

答案 0 :(得分:1)

在python文件中使用__all__。它是一个字符串列表,定义了在模块上使用from <module> import *时将导出模块中的哪些符号。

__all__下的python文件中,

提供了您要向外部公开的所有功能。

例如在module1.py中写__all__ = ['c1','foo'],在module2.py中写__all__=['c2']

然后在__init__.py文件中

from .module1 import * 
from  .module2 import *
__all__ = module1.__all__ + module2.__all__ 

就是这样。那么您可以导入为from package import foo