Python中的导入语句混乱
我想在一个通用的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
的情况。这将解决你的问题,并且让今后的维护变得更简单。