Почему функция dir() в Python не отображает все вызываемые атрибуты?Почему некоторые вызываемые атрибуты не указаны функцией dir()?
import win32com.client
iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")
currentTrack = win32com.client.CastTo(iTunes.CurrentTrack,"IITFileOrCDTrack")
print dir(currentTrack)
Результат:
['AddArtworkFromFile', 'CLSID', 'Delete', 'GetITObjectIDs', 'Play', 'Reveal', 'UpdateInfoFromFile', 'UpdatePodcastFeed', '_ApplyTypes_', '__doc__', '__eq__', '__getattr__', '__init__', '__module__', '__ne__', '__repr__', '__setattr__', '_get_good_object_', '_get_good_single_object_', '_oleobj_', '_prop_map_get_', '_prop_map_put_', 'coclass_clsid']
print currentTrack.Location
Местоположение является вызываемым и возвращает путь к файлу, но не перечислен в первый результат. Он также не отображается с инструментами завершения кода. Это потому, что он извлекается методом геттера? Я вижу, что он указан в файлах _prop_map_get_ и _prop_map_put_.
Кроме того, почему currentTrack.Location возвращает путь к файлу, когда currentTrack._prop_map_get_ ['Location'] возвращает "(1610874880, 2, (8, 0),(), 'Location', None)?" Где он получает строку пути к файлу?
+1 Понимание этого было, когда лампочка действительно продолжалась над моей головой для Python (ну, для динамических языков вообще ...) – bgporter
Мне любопытно, как PythonWin может дать мне правильный список атрибутов для завершения с экземпляром COMObject, и можно ли сделать то же самое в коде Python, или если он делает то, что пакет win32com не раскрывает. – geoffspear