python win32com,对象是否会自动重用?

时间:2014-01-22 12:15:37

标签: python com pythoncom

python代码遍历简单文档的段落(7行“Line 1”,“Line 2”等)。我希望每个段落对象都是唯一的,但实际上我得到重复,在这种情况下0x25173368。怎么了?这完全违背了我的直觉。

代码:

import win32com.client as win32

word = win32.GetObject(Class="Word.Application")
doc = word.Documents.Open("test.docx")

for para in doc.Paragraphs:
  print repr(para)

输出:

<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427240>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427280>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427320>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>

1 个答案:

答案 0 :(得分:0)

doc.Paragraphs上的迭代可能会动态地为每个底层COM对象创建一个Python包装器对象。由于您没有将para存储在任何地方,因此当包装器对象超出范围时会被销毁,下一次迭代可能会在同一个内存地址处创建一个新对象。

请尝试使用此功能,看看结果是否不同:

paras = list(doc.Paragraphs)
for para in paras:
    print repr(para)