1

我想在一个通用的 python 文件中导入一些文件,然后当我需要当前模块中的导入模块时包含该文件。如果使用 from x import y,这当然会导致错误和重新导入,但是当使用“正常”导入语句时,我会得到很长的指令语句,例如:

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

而我想做以下事情:

x = importModule.ClassName()

但正如我之前所说,这样做:

from importModule.directoryName1.directoryName2.moduleNam import ClassName

在一般文件中不起作用,因为我在 ClassName 中包含 importModule。

所以,我基本上想知道这是否有任何问题(类似于 using 语句,比如 C++ 中的语句,也许?)

4

2 回答 2

3

听起来你有递归导入(importModulemoduleName,和moduleNameimportModule。如果你重构,你应该能够使用

from importModule.directoryName1.directoryName2.moduleName import ClassName

要重构,您可以更改导入事物的顺序,moduleName以便类定义ClassName出现在importModule导入之前;只要每个文件在尝试导入另一个模块之前定义另一个模块所需的引用,事情就会解决。

另一种重构方法:您始终可以ClassName在使用它的函数中导入;只要在moduleName导入之前没有调用该函数,就可以了。

但是,重构的最佳方法A是将一些类或引用移动到它们自己的模块中,这样您就不会遇到importB Bimports的任何情况A。这将解决您的问题,并使维护工作变得更容易。

于 2010-07-02T13:15:29.763 回答
2

好吧,你可以

from importModule.directoryName1.directoryName2 import moduleName as importModule

但这有点丑陋且非常令人困惑,并且不会在稍后阅读您的代码的 Python 程序员那里获得很多分数。

于 2010-07-02T13:08:36.230 回答