Python中的导入语句混乱

1 投票
2 回答
955 浏览
提问于 2025-04-16 00:44

我想在一个通用的Python文件中导入多个文件,然后在需要这些导入模块的地方包含这个文件。不过,这样做会导致错误和重复导入。如果我使用“from x import y”这种方式,就会出现问题。但是如果我用“正常”的导入语句,就会写出很长的指令,比如:

x = importModule.directoryName1.directoryName2.moduleName.ClassName()

而我其实想这样做:

x = importModule.ClassName()

但是就像我之前说的,这样做:

from importModule.directoryName1.directoryName2.moduleNam import ClassName

在一个通用文件中是行不通的,因为我在ClassName里包含了importModule。

所以,我基本上是在想有没有什么办法可以解决这个问题(比如像C++中的using语句那样?)

2 个回答

2

好吧,你可以这样做

from importModule.directoryName1.directoryName2 import moduleName as importModule

但是这样看起来有点丑,而且很容易让人困惑,之后看你代码的Python程序员也不会觉得你写得好。

3

听起来你遇到了递归导入的问题(importModule 引用了 moduleName,而 moduleName 又引用了 importModule)。如果你进行一些重构,应该能解决这个问题。

from importModule.directoryName1.directoryName2.moduleName import ClassName

重构的方法之一是改变在 moduleName 中导入的顺序,让 ClassName 的定义出现在 importModule 导入之前;只要每个文件在尝试导入另一个模块之前,先定义好对方需要的引用,事情就能顺利进行。

另一种重构的方法是,你可以在使用 ClassName 的函数内部进行导入;只要这个函数在 moduleName 被导入之前没有被调用,就没问题。

不过,最好的重构方法是把一些类或引用移动到自己的模块中,这样就不会出现 A 导入 B 同时 B 又导入 A 的情况。这将解决你的问题,并且让今后的维护变得更简单。

撰写回答