Domanda

Come mai la funzione dir () in Python non mostra tutti gli attributi richiamabili?

import win32com.client

iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")
currentTrack = win32com.client.CastTo(iTunes.CurrentTrack,"IITFileOrCDTrack")

print dir(currentTrack)

Risultato:

['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

La posizione è richiamabile e restituisce il percorso del file, ma non è elencato nel primo risultato. Inoltre non si presenta con gli strumenti di completamento del codice. Forse perché proprio essere recuperato attraverso un metodo getter? Lo vedo elencati sotto _prop_map_get_ e _prop_map_put _.

Inoltre, perché currentTrack.Location restituisce un percorso di file quando currentTrack._prop_map_get _ [ 'Località'] ritorni "(1.610.874,88 mila, 2, (8, 0), (), 'Luogo', nessuno)?" Dove sta ottenendo la stringa di percorso del file?

È stato utile?

Soluzione

Buona uno. Dir () fa funzionare correttamente e il comportamento è spiegabile.

La posizione è una proprietà della currentTrack ma è accessibile solo tramite currentTrack._prop_map_get_. Il _prop_map_get_ callable è elencato in dir (currentTrack). Vedere getattr , che è in qualche modo mappato currentTrack._prop_map_get _

troverete vari casi in win32com che è un wrapper.

Altri suggerimenti

In pitone, un oggetto può avere un metodo __getattr__. Sarà richiamato per qualsiasi accesso attributo per un attributo inesistente. Sembra che questo oggetto sta usando _prop_map_get_ come parte della sua attuazione __getattr__.

Dal __getattr__ può fare il calcolo arbitrario per soddisfare la richiesta di attributi, e può aumentare AttributeError per i nomi che non può gestire, non c'è modo dall'esterno per elencare tutti gli attributi che sono disponibili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top