将子类中的类导入(别名)命名空间

时间:2016-01-21 16:15:36

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

我有以下包结构:

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会覆盖第一个。{/ p>

1 个答案:

答案 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