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)を試しましたが、どちらも&quot;&quot;のみを返します。それは私が探しているものではありません。
ありがとう。
解決
残念ながら、手元にWindowsマシンはありませんが、 itunes .__ class __
は問題の itunes
オブジェクトの(old_style)クラスであり、 lib .__ class __
は lib
のものです。したがって、クラスの __ name __
属性を見ると、あなたが望むものが得られるはずです。
残念ながら、これらは古いスタイルのクラスであるため( type(...)
は正しく機能しません)、win32comは長い間、光沢のある新しいものよりもずっと前から存在していました。スタイルクラスはPython 2.2で生まれたため、完全に理解できると思います;-)。
他のヒント
この属性エラーの主な理由は、COMサーバーが遅延バインディング(動的)から早期バインディング(静的)に移行したためです。
- Late Bindingでは、メソッドが呼び出されるたびに、オブジェクトに対してメソッドが照会され、成功した場合は呼び出しを行うことができます。
- アーリーバインディングでは、オブジェクトモデルの情報は、オブジェクト呼び出しによって提供される型情報から事前に決定されます。アーリーバインディングはMakePyを使用します。また、事前バインディングでは大文字と小文字が区別されます。
試してください:
itunes = win32com.client.dynamic.Dispatch("iTunes.Application")
これにより、COMサーバーが動的モジュールにフォーカスを設定し、iTunesのCOMオブジェクトのみが提供されます。
所属していません StackOverflow