如何获取win32com对象的实例类型?
首先,请原谅我这个问题标题可能有些不太清楚,可能确实有些问题,但我也不知道该怎么更好地表达。
这个问题是在用Python通过COM控制iTunes的情况下提出的。
>>> itunes = win32com.client.Dispatch("iTunes.Application")
>>> itunes
<win32com.gen_py.iTunes 1.12 Type Library.IiTunes instance at 0x27248400>
>>> lib = itunes.LibraryPlaylist
>>> lib
<win32com.gen_py.iTunes 1.12 Type Library.IITLibraryPlaylist instance at 0x27249880>
我想做的是从iTunes中获取IiTunes,从lib中获取IITLibraryPlaylist。我试过用type(itunes)和type(lib),但它们都只返回了"",这不是我想要的结果。
谢谢。
2 个回答
1
这个属性错误的主要原因是你的COM服务器从“晚绑定”(动态绑定)变成了“早绑定”(静态绑定)。
- 在晚绑定中,每当调用一个方法时,系统会先去查询这个对象是否有这个方法,如果找到了,就可以进行调用。
- 而在早绑定中,系统会提前根据对象调用提供的类型信息来确定对象模型的信息。早绑定会使用MakePy工具。而且,早绑定对大小写是敏感的。
你可以尝试:
itunes = win32com.client.dynamic.Dispatch("iTunes.Application")
这样做会强制COM服务器关注动态模块,这样你就只会得到iTunes的COM对象。
2
很遗憾,我手头没有Windows电脑可以试试,但我觉得 itunes.__class__
是你提到的 itunes
对象的(旧式)类,而 lib.__class__
是 lib
的类。所以查看这些类的 __name__
属性应该能帮你找到你想要的东西。
可惜的是,这些都是旧式类(所以 type(...)
不能正常工作),不过win32com已经存在很久了,早在Python 2.2推出新式类之前就有了,所以我觉得这完全可以理解;-)。