python 导入嵌套类简写

11 投票
1 回答
13033 浏览
提问于 2025-04-18 01:30

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

这个问题和在嵌套包中导入模块类似,只不过这里的嵌套是在同一个.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 个回答

16

把Python类嵌套在一起其实没什么特别的意义,除了把命名空间放在一起。通常情况下,没必要这样做。如果你需要创建额外的命名空间,直接使用模块就可以了。

你不能直接导入嵌套的类;你只能导入模块中的全局变量,所以在这个例子中只能导入Foo。你需要先导入最外层的类,然后再创建一个新的引用:

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

这里的del Foo是可选的。上面的例子说明了为什么你一开始就不应该嵌套类。

撰写回答