Python导入模块函数

2024-04-19 01:58:18 发布

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

我有一个关于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:

    import all classes defined in src.module1

  • 请求2:

    import fundamental classes defined in src.module1 and src.module2

    这里基本类可以指src.module1.my_file1中的ClassA1src.module2.my_file2中的ClassB2

在C++中,可以很容易地实现这一点。例如,对于第二个需求,我可以将与基本类相关的所有头文件放在一个头文件中。然后在应用程序中,我只包含这个头文件。但我不知道Python如何工作。谢谢。你知道吗


Tags: 文件代码pyimportsrcapp头文件application
2条回答

要回答第一个问题,只需将from src.module1.my_file1 import ClassA1, ClassA2, ClassA3替换为import src.module.my_file1

这将允许您访问模块中的所有类。如果需要,还可以将导入的模块命名为import module as md,这样可以访问模块中的所有类,如a = md.ClassA1()

至于你的第二个问题,我认为永远不需要只从一个模块导入几个类。除非被调用,否则这些类不会被实例化,因此不会为它们分配内存。你知道吗

答案是基于@Xatyrian在Python中使用__all__关键字的评论(关于Stackoverflow的讨论可以在这里找到,@aron Hall的评论非常好)

Request 1: import all classes defined in src.module1

请在讨论中勾选@Marshal Hayes answer。基本上,我们将使用import module_name导入模块

Request 2: import fundamental classes defined in src.module1 and 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)中,我们表示要导出哪个文件(如果要从这个文件导出函数,我们就导出这个文件)。然后在每个函数实现文件中,例如myu file1.py,我们可以在__all__=[fun1,fun2,fun3]关键字中列出所有要导出的函数。你知道吗

然后,当我们想在应用程序文件中使用导出的函数时,我们只需导入顶层模块名。在我们的示例中,我们将执行以下操作:

import src
src.fun1()
src.fun2()
print(dir(src)) : list all functions and modules in this package 

相关问题 更多 >