【问题标题】:Import classes from submodules into (aliased) namespace将子模块中的类导入(别名)命名空间
【发布时间】:2016-04-27 23:55:54
【问题描述】:

我的包结构如下:

package_name/
    __init__.py
    some_module.py
    another_module.py
    # other classes

我正在使用另一个 Python 文件中的这个包,我想在其中执行以下操作:

  • 声明package_name的别名

    import package_name as pn
    
  • 并引用some_module.pyanother_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 覆盖了第一个。

【问题讨论】:

    标签: python alias packages python-import python-module


    【解决方案1】:

    从包中导入单个模块的语法是:

    from package_name import some_module as pn
    

    要从package_name 访问其他模块中定义的类,正确的做法是将这些类显式地或使用某些工具导入到package_name 内的__init__.py 文件中:

    package_name/__init__.py:

    from .some_module import a_class
    from .another_module import another_class
    

    这将使您可以简单地做:

    import package_name as pn
    pn.a_class
    

    【讨论】:

    • 谢谢。您的第一个建议不适用于多个import,但导入__init__.py 中的类就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2018-02-21
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多