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>
내가 하고 싶은 일은 '아이튠즈'아이튠즈에서'IIT도서관재생목록' lib에서.나는 type(itunes)과 type(lib)을 시도했지만 둘 다 ""만 반환하고 그것은 내가 찾고 있는 것이 아닙니다.
감사해요.
해결책
불행히도 시도해 볼 수 있는 Windows 시스템이 없지만 제 생각엔 itunes.__class__
의 (old_style) 클래스입니다. itunes
문제의 객체와 lib.__class__
그것의 lib
.그래서 살펴보면 __name__
수업의 속성은 당신이 원하는 것을 제공해야합니다.
불행하게도 이러한 클래스는 구식 클래스입니다. type(...)
제대로 작동하지 않음), 그러나 win32com은 Python 2.2에서 빛나는 새 스타일 클래스가 탄생하기 훨씬 전부터 오랫동안 사용되어 왔기 때문에 완전히 이해할 수 있다고 생각합니다 ;-).
다른 팁
이 특성 오류가 발생하는 주된 이유는 COM 서버가 후기 바인딩(동적)에서 초기 바인딩(정적)으로 전환되었기 때문입니다.
- Late Binding에서는 메소드가 호출될 때마다 객체에 해당 메소드를 쿼리하고 성공하면 호출을 수행할 수 있습니다.
- Early Binding에서는 개체 호출에서 제공하는 형식 정보를 통해 개체 모델의 정보를 미리 결정합니다.초기 바인딩은 MakePy를 사용합니다.또한 초기 바인딩은 대소문자를 구분합니다.
노력하다:
itunes = win32com.client.dynamic.Dispatch("iTunes.Application")
이렇게 하면 COM 서버가 iTunes의 COM 개체만 제공하는 동적 모듈에 초점을 맞추게 됩니다.
제휴하지 않습니다 StackOverflow