我有一个与Python文件管理相关的问题。我如何组织我的Python文件的方式如下(__init__.py
为空):
--src
|---__init__.py
|---module1
| |----- __init__.py
| |----- my_file1.py
|---module2
| |----- __init__.py
| |----- my_file2.py
--app
|---my_application.py
如您所见,我将代码分为两组:第一组代码位于src
目录中,包含自定义库代码;第二组代码位于app
目录中,包含将调用自定义库的应用程序代码。 my_application.py
可能包含以下代码:
from src.module1.my_file1 import ClassA1, ClassA2, ClassA3
from src.module2.my_file2 import ClassB1, ClassB2, ClassB3
a = ClassA1()
b = ClassB3()
每当我编写基于它的应用程序时,从自定义库中导入类是很无聊的。我想有类似的东西:
请求1:
导入src.module1
中定义的所有类
请求2:
导入src.module1和src.module2
中定义的基本类
此处基本类可以引用ClassA1
中的src.module1.my_file1
和ClassB2
中的src.module2.my_file2
在C ++中,这很容易实现。例如,对于第二个要求,我可以将所有与基本类相关的头文件放在一个头文件中。然后在应用程序中,我只包含这个头文件。但我不知道Python如何工作。谢谢。
答案 0 :(得分:1)
要回答您的第一个问题,您只需将from src.module1.my_file1 import ClassA1, ClassA2, ClassA3
替换为import src.module.my_file1
这将允许您访问模块中的所有类。如果需要,您还可以将导入的模块命名为import module as md
,这样您就可以访问模块中的所有类,如a = md.ClassA1()
关于你的第二个问题,我认为不需要只从模块中导入一些类。除非被调用,否则这些类不会被实例化,因此不会为它们分配任何内存。
答案 1 :(得分:0)
答案基于@ Xatyrian的评论在Python中使用__all__
关键字购买(Stackoverflow的讨论可以在这里找到,@Aaron Hall的评论非常好)
请求1:导入src.module1
中定义的所有类
请在本次讨论中查看@Marshal Hayes的回答。基本上,我们将使用import module_name
请求2:导入src.module1和src.module2中定义的基本类
可以使用关键字__all__
来完成此操作。
--src
|---__init__.py (1)
|---module1
| |----- __init__.py (2)
| |----- my_file1.py
|---module2
| |----- __init__.py (3)
| |----- my_file2.py
--app
|---my_application.py
在(1)__init__.py
中,我们可以表示我们要导出的模块(如果我们要从此模块导出函数,则导出模块)。在(2)和(3)中,我们表示要导出的文件(如果我们要从此文件导出函数,则导出文件)。然后在每个函数实现文件中,例如my_file1.py,我们可以列出我们要在__all__=[fun1,fun2,fun3]
关键字中导出的所有函数。
然后,当我们想在应用程序文件中使用导出的函数时,我们只需导入顶层模块名称。在我们的示例中,我们将执行以下操作:
import src
src.fun1()
src.fun2()
print(dir(src)) : list all functions and modules in this package