Вопрос

Прежде всего, пожалуйста, извините меня за неточность в постановке этого вопроса.Вероятно, они есть, но на самом деле я не знаю лучшего.

Этот вопрос был поднят в контексте управления iTunes через COM из 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>

Что я хотел бы сделать, так это получить 'IiTunes'из iTunes и'IITБиблиотекаПлейлист' из либ.Я пробовал type(itunes) и type(lib), но они оба возвращают только "", а это не то, что я ищу.

Спасибо.

Это было полезно?

Решение

К сожалению, у меня нет под рукой компьютера с Windows, чтобы попробовать, но я думаю itunes.__class__ это класс (old_style) itunes рассматриваемый объект и lib.__class__ что из lib.Итак, глядя на __name__ Атрибут классов должен дать вам то, что вы желаете.

К сожалению, это классы старого стиля (поэтому type(...) не работает правильно), но win32com существует уже ДОЛГОЕ время, задолго до того, как в Python 2.2 появились блестящие классы нового стиля, так что я думаю, это вполне понятно ;-).

Другие советы

Основная причина этой ошибки атрибута заключается в том, что ваш COM-сервер перешел с позднего связывания (динамического) на раннее связывание (статическое).

  • В позднем связывании при каждом вызове метода у объекта запрашивается метод, и если он успешен, то можно выполнить вызов.
  • В раннем связывании информация объектной модели определяется заранее на основе информации о типе, предоставляемой вызовом объекта.Раннее связывание использует MakePy.Кроме того, раннее связывание чувствительно к регистру.

Пытаться:

itunes = win32com.client.dynamic.Dispatch("iTunes.Application")

Это заставит COM-сервер переключить фокус на динамический модуль, который должен предоставить вам только COM-объект iTunes.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top