假设,我需要使用lxml
-库将以下XML读取到python对象中:
<detaileddescription>
<para>
<parameterlist kind="param">
<parameteritem>
<parameternamelist>
<parametername>parameters</parametername>
</parameternamelist>
<parameterdescription>
<para>- parameters of the distribution</para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
</detaileddescription>
因此,我创建了以下类:
ParaTag.py
from ParameterListTag import ParameterListTag
class ParaTag:
parameterListTag: ParameterListTag
text: str
def __init__(self):
self.parameterListTag = None
self.text = None
参数描述标记.py
from ParaTag import ParaTag
class ParameterDescriptionTag:
text: str
paraTag: ParaTag
def __init__(self):
self.text = None
self.paraTag = None
ParameterListTag.py
from ParameterDescriptionTag import ParameterDescriptionTag
class ParameterListTag:
parameterDescTag: ParameterDescriptionTag
text: str
def __init__(self):
self.parameterDescTag = None
self.text = None
我的目标是通过lxml
库读取XML,然后将读取标记映射到相应的类中。
以下是驱动程序:
MainClass.py
from ParaTag import ParaTag
class MainClass:
@classmethod
def main(cls):
para_obj = ParaTag()
print(para_obj)
if __name__ == '__main__':
MainClass.main()
然而,这并不执行:
输出
C:UserspcAppDataLocalMicrosoftWindowsAppspython3.7.exe C:/Users/pc/source/repos/OOP_in_python/MainClass.py
Traceback (most recent call last):
File "C:/Users/pc/source/repos/OOP_in_python/MainClass.py", line 1, in <module>
from ParaTag import ParaTag
File "C:UserspcsourcereposOOP_in_pythonParaTag.py", line 1, in <module>
from ParameterListTag import ParameterListTag
File "C:UserspcsourcereposOOP_in_pythonParameterListTag.py", line 1, in <module>
from ParameterDescriptionTag import ParameterDescriptionTag
File "C:UserspcsourcereposOOP_in_pythonParameterDescriptionTag.py", line 1, in <module>
from ParaTag import ParaTag
ImportError: cannot import name 'ParaTag' from 'ParaTag' (C:UserspcsourcereposOOP_in_pythonParaTag.py)
Process finished with exit code 1
那么,我该如何解决这个问题
我认为您有循环依赖关系。如果我正确地阅读了您的代码,ParaTag引用了ParaListTag,后者引用了ParaDescriptionTag,后者再次引用了ParaTag。
https://www.yawintutor.com/importerror-cannot-import-name/#:~:text=%20python%20ImportError%3A%20无法%20import,已使用%20to%20load%20the%20模块。
这个链接比我能更好地解释为什么允许这样做,但关键段落是
"另一个原因是负载相关性是循环的。如果两个python文件相互引用并试图加载另一个文件,则将建立循环加载依赖关系。这将导致堆内存错误。Python检测并抛出错误ImportError:Can't Import Name">
Mauro Baraldi的链接指出,你需要找到一种不同的方式来构建你的类。