Dlaczego funkcja dir() w Pythonie nie wyświetla wszystkich atrybutów wywoływalnych?Dlaczego niektóre opcje wywoływalne nie są wymienione przez funkcję dir()?
import win32com.client
iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")
currentTrack = win32com.client.CastTo(iTunes.CurrentTrack,"IITFileOrCDTrack")
print dir(currentTrack)
Wynik:
['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
Lokalizacja jest wymagalne i zwraca ścieżkę do pliku, ale nie jest wpisany do pierwszego wyniku. Nie wyświetla się również z narzędziami do uzupełniania kodu. Czy to dlatego, że jest pobierana metodą gettera? Widzę go na liście _prop_map_get_ i _prop_map_put_.
Ponadto, dlaczego currentTrack.Location zwraca ścieżkę do pliku, gdy currentTrack._prop_map_get _ ['Location'] zwraca "(1610874880, 2, (8, 0),()," Lokalizacja ", brak)?" Gdzie znajduje się ciąg ścieżki pliku?
+1 Zrozumiałem, kiedy żarówka naprawdę przeszła mi przez głowę w Pythonie (no, ogólnie, w językach dynamicznych ...) – bgporter
Jestem ciekawa, w jaki sposób PythonWin może podać poprawną listę atrybutów do uzupełnienia z instancją "COMObject" i czy można zrobić to samo w kodzie Pythona lub jeśli robi się to, czego nie ujawnia pakiet win32com. – geoffspear