Wie Instanztyp eines win32com Objekt zu bekommen?
Frage
Zunächst einmal entschuldigen Sie mich für jede Inkohärenz in der Fliese dieser Frage. Es hat wahrscheinlich einige, aber weiß wirklich nicht besser.
Diese Frage im Zusammenhang mit der Steuerung von iTunes über COM von Python angesprochen wurde.
>>> 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>
Was würde ich tun möchte, ist, abrufen ' IiTunes ' von itunes und ' IITLibraryPlaylist ' von lib. Ich habe versucht, Typ (itunes) und Typ (lib), aber sie beide nur return „“ und das ist nicht das, was ich suche.
Danke.
Lösung
Leider habe ich keinen Windows-Rechner zur Hand, um zu versuchen, aber ich denke, itunes.__class__
ist die (old_style) Klasse des itunes
Objekts in Frage, und lib.__class__
dass der lib
. So Blick auf die __name__
Attribut der Klassen sollten Sie geben, was Sie sich wünschen.
Es ist leider, dass diese alten Stil-Klassen (so type(...)
Recht nicht funktioniert), aber win32com hat sich für eine lange Zeit, von gut vor den glänzenden neuen Stil Klassen in Python geboren wurden 2.2, so ist es völlig verständlich, ich denke, -).
Andere Tipps
Der Hauptgrund für dieses Attribut Fehler ist, weil Ihr COM-Server von später Bindung (dynamisch) verschoben hat, um frühe Bindung (statisch).
- Bei später Bindung, wenn eine Methode aufgerufen wird, wird das Objekt für die Methode abgefragt und wenn es gelingt, dann kann der Anruf erfolgen.
- In der frühen Bindung, die Informationen des Objektmodells wird im Voraus von Typinformationen durch den Objektaufruf geliefert bestimmt. Die frühe Bindung Marken Makepy verwenden. Auch die frühe Bindung ist Groß- und Kleinschreibung.
Versuchen:
itunes = win32com.client.dynamic.Dispatch("iTunes.Application")
Damit wird der COM-Server erzwingen Fokus auf das dynamische Modul zu setzen, die Sie nur die COM-Objekt von iTunes geben sollte.