python 导入嵌套类简写
如何使用“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
是可选的。上面的例子说明了为什么你一开始就不应该嵌套类。