我有以下包结构:
package_name/
__init__.py
some_module.py
another_module.py
# other classes
我在另一个Python文件中使用此包,我希望在其中执行以下操作:
声明package_name
import package_name as pn
并参考some_module.py
,another_module.py
等内的课程,如下所示:
instance = pn.SomeClass(pn.AnotherClass(x, y))
即。省略模块名称,而只使用包名称别名。
这样的事情:
import package_name as pn
from package_name import some_module to pn
这可能是等同的吗?
我可以这样做:
from package_name.some_module import SomeClass
from package_name.another_module import AnotherClass
instance = SomeClass(AnotherClass(x, y))
和此:
import package_name.some_module
import package_name.another_module
instance = pn.some_module.SomeClass(pn.some_module.AnotherClass(x, y))
但这不起作用
import package_name.some_module as pn
import package_name.another_module as pn
instance = pn.SomeClass(pn.AnotherClass(x, y))
因为第二个as pn
会覆盖第一个。{/ p>
答案 0 :(得分:1)
从包中导入单个模块的语法是:
from package_name import some_module as pn
要从package_name
访问其他模块中定义的类,正确的做法是将这些类(明确地或使用某些工具)导入package_name中的__init__.py
文件:< / p>
package_name/__init__.py
:
from .some_module import a_class
from .another_module import another_class
这样你就可以做到:
import package_name as pn
pn.a_class