質問

まず、この質問のタイルに矛盾があることを許してください。おそらくいくつかありますが、実際にはよくわかりません。

この質問は、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オブジェクトのみが提供されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top