Python 模块xml.etree.ElementTree与xml有何关联?

Python 模块xml.etree.ElementTree与xml有何关联?,python,python-2.7,Python,Python 2.7,我不是一个专业的程序员,我刚刚开始学习python。 我只是想,因为我能做到: >>> from xml.etree.ElementTree import Element >>> var = Element("Something") 但这并不意味着我能做到: >>> import xml >>> var = xml.etree.ElementTree.Element("Something") 事实上,这样做: >&

我不是一个专业的程序员,我刚刚开始学习python。 我只是想,因为我能做到:

>>> from xml.etree.ElementTree import Element
>>> var = Element("Something")
但这并不意味着我能做到:

>>> import xml
>>> var = xml.etree.ElementTree.Element("Something")
事实上,这样做:

>>> import xml
>>> dir(xml)
['_MINIMUM_XMLPLUS_VERSION', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
etree甚至不作为xml提供的方法之一出现。 xml和xml.etree.ElementTree之间的关系是什么?
为什么我不能将etree视为xml的方法之一?

xml。etree
xml
的子模块。它仅在导入xml.etree后显示在
xml
的命名空间中。父模块可以在初始化时导入其子模块(例如,在2.7中,
os
imports
os.path
1),但不需要这样做

相反,当您直接从包导入模块时,首先会自动导入包

奇怪的是,我在文件中找不到任何措辞来说明这一点。但一项测试表明,这正是发生的情况:


$cat test/\uuuuu init\uuuuuuu.py
打印“包初始化”
导入回溯
traceback.print_stack()
$cat测试/模块.py
打印“模块初始化”
导入回溯
traceback.print_stack()
$python
>>>导入测试模块
包初始化
文件“”,第1行,在
文件“test\\uuuu init\uuuuu.py”,第3行,在
traceback.print_stack()
模块初始化
文件“”,第1行,在
文件“test\module.py”,第3行,在
traceback.print_stack()


1虽然没有文档记录,但不要依赖此

xml。etree
xml
的子模块。它仅在导入xml.etree后显示在
xml
的命名空间中。父模块可以在初始化时导入其子模块(例如,在2.7中,
os
imports
os.path
1),但不需要这样做

相反,当您直接从包导入模块时,首先会自动导入包

奇怪的是,我在文件中找不到任何措辞来说明这一点。但一项测试表明,这正是发生的情况:


$cat test/\uuuuu init\uuuuuuu.py
打印“包初始化”
导入回溯
traceback.print_stack()
$cat测试/模块.py
打印“模块初始化”
导入回溯
traceback.print_stack()
$python
>>>导入测试模块
包初始化
文件“”,第1行,在
文件“test\\uuuu init\uuuuu.py”,第3行,在
traceback.print_stack()
模块初始化
文件“”,第1行,在
文件“test\module.py”,第3行,在
traceback.print_stack()


1虽然没有文档记录,但不要依赖于此

您只能在导入模块后使用这些模块。有时你必须自己导入,有时你导入的一个模块会自动导入它自己的子模块
xml
有多个子模块,您可能不会全部使用它们。因此,您必须导入所需的模块。导入模块后,您只能使用模块。有时你必须自己导入,有时你导入的一个模块会自动导入它自己的子模块
xml
有多个子模块,您可能不会全部使用它们。所以,你必须导入你想要的。
$ cat test/__init__.py

print "package init"
import traceback
traceback.print_stack()

$ cat test/module.py

print "module init"
import traceback
traceback.print_stack()

$ python
<...>
>>> import test.module
package init
  File "<stdin>", line 1, in <module>
  File "test\__init__.py", line 3, in <module>
    traceback.print_stack()
module init
  File "<stdin>", line 1, in <module>
  File "test\module.py", line 3, in <module>
    traceback.print_stack()