python导入嵌套类的简写

时间:2014-04-05 19:10:41

标签: python class import

如何使用“as”简写导入嵌套包?

这个问题类似于importing a module in nested packages,只有嵌套在同一个.py文件中,而不是在文件夹中。

在foo.py中(所有python文件都在同一个包中,版本为3.4):

class Foo:
    class Bar:
        ...

我可以在另一个.py文件中访问这些子类:

from . import foo
...
bar = foo.Foo.Bar()

我想做什么:

from . import foo.Foo.Bar as Bar  # DOES NOT WORK: "unresolved reference" error.
...
bar = Bar()  # saves typing.
bar2 = Bar()
...

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

嵌套Python类没什么意义;除了嵌套命名空间之外,没有特别的意义。 很少是否需要这样做。如果您需要生成其他名称空间,请使用模块。

您无法直接导入嵌套类;你只能导入模块全局变量,所以在这种情况下Foo。您必须导入最外层的类并创建一个新的引用:

from .foo import Foo
Bar = Foo.Bar
del Foo  # remove the imported Foo class again from this module globals

del Foo完全是可选的。上面的内容确实说明了为什么你不想在开始时嵌套类。