给出以下软件包:
<!-- 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',) ?
,c1
和foo
导入c2
。一种明显的方法是在__init__.py
内显式编写导入:
__init__.py
现在,我可以编写以下来源:
from module1 import c1, foo
from module2 import c2
但是,我的目标是使用注册表列表import package
print(package.c1)
。我尝试在exports
中使用importlib
,但无处可去:(
任何帮助都是宝贵的考虑
答案 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