Come ottenere il tipo di istanza di un oggetto win32com?
Domanda
Prima di tutto, mi scusi per qualsiasi incoerenza nel riquadro di questa domanda. Probabilmente ne ha alcuni, ma davvero non lo so meglio.
Questa domanda è stata sollevata nel contesto del controllo di iTunes tramite COM da Python.
>>> 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>
Quello che vorrei fare è recuperare " IiTunes " da iTunes e " IITLibraryPlaylist " da lib. Ho provato a digitare (itunes) e digitare (lib) ma entrambi restituiscono solo " " e non è quello che sto cercando.
Grazie.
Soluzione
Sfortunatamente non ho a disposizione una macchina Windows da provare, ma penso che itunes .__ class__
sia la classe (old_style) dell'oggetto itunes
in questione e lib .__ class__
quello di lib
. Quindi, guardando l'attributo __name__
delle classi dovresti darti ciò che desideri.
Sfortunatamente si tratta di classi di vecchio stile (quindi type (...)
non funziona bene), ma win32com è in circolazione da LUNGO tempo, da molto prima della nuova brillante- le classi di stile sono nate in Python 2.2, quindi è del tutto comprensibile, credo ;-).
Altri suggerimenti
Il motivo principale di questo errore di attributo è dovuto al fatto che il server COM è passato dal binding tardivo (dinamico) al binding anticipato (statico).
- In Late Binding, ogni volta che viene chiamato un metodo, l'oggetto viene interrogato per il metodo e se ha esito positivo, è possibile effettuare la chiamata.
- In Early Binding, le informazioni sul modello a oggetti sono determinate in anticipo dalle informazioni sul tipo fornite dalla chiamata all'oggetto. L'associazione anticipata utilizza MakePy. Inoltre, l'associazione precoce fa distinzione tra maiuscole e minuscole.
Prova:
itunes = win32com.client.dynamic.Dispatch("iTunes.Application")
Questo costringerà il server COM a mettere a fuoco il modulo dinamico che dovrebbe darti solo l'oggetto COM di iTunes.