如何从Python中的许多类导出一个类?

jit*_*svm 1 python syntax import classnotfoundexception python-3.x

我对语法感到困惑:

import module.package
from module import package
Run Code Online (Sandbox Code Playgroud)

来自引用另一个文件夹,还是应该将它用于同一文件中的多个类中?

Sha*_*ank 5

包是包含名为最上层的文件的任何目录__init__.py.模块是任何带.py扩展名的Python文件.

从这些定义中,您可能会发现模块不能包含包.这是相反的方式; 包中包含模块.模块唯一可以包含的是绑定到Python对象的名称(类,函数等)

导入包时,只需执行该__init__.py文件即可.导入模块时,只需执行模块文件本身即可.使用类似from package import moduleor之类的东西从包导入模块时import package.module,可以__init__.py从包和模块文件本身执行.

要仅从模块导入类,必须使用该from X import Y语句,其中X是,[package1.[subpackage2.]]modulename并且Y是与要导入名称的对象绑定的名称.请注意,即使执行此类导入,__init__.py整个模块脚本仍将执行.唯一的区别是添加到命名空间的内容,它只是指向的对象Y.

请注意,该from X import Y陈述有点奇怪.因为如果X引用一个包,那么Y可以引用包内的一个模块.为了克服这种混淆,最好将包和模块视为命名空间.最大的区别是包是模块的命名空间,而模块是具体Python对象的命名空间.

值得注意的是,您可以使用逗号从一个命名空间导入多个名称:

from collections import OrderedDict, Counter

此外,您可以从命名空间导入所有名称:

from itertools import *

但是,建议不要这样做,因为它会不必要地污染命名空间.对于Python标准库,它基本上没问题,因为你不太可能与类似的东西发生名称冲突takewhile,但如果你正在处理一个包含多个库的大型项目,那么尽可能保持名称空间的清洁以避免冲突是很好的.