tpo*_*eux 7 python itunes win32com
为什么Python中的dir()函数没有显示所有可调用属性?
import win32com.client
iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")
currentTrack = win32com.client.CastTo(iTunes.CurrentTrack,"IITFileOrCDTrack")
print dir(currentTrack)
Run Code Online (Sandbox Code Playgroud)
结果:
['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
Run Code Online (Sandbox Code Playgroud)
位置可调用并返回文件路径,但未在第一个结果中列出.它也没有显示代码完成工具.是因为它是通过getter方法获取的吗?我看到它列在_prop_map_get_和_prop_map_put_下.
另外,当currentTrack._prop_map_get _ ['Location']返回"(1610874880,2,(8,0),(),'Location',None)时,currentTrack.Location为什么会返回文件路径?" 它在哪里获取文件路径字符串?
在python中,一个对象可以有一个__getattr__方法.对于不存在的属性,将对任何属性访问调用它.看起来这个对象正在_prop_map_get_用作其实现的一部分__getattr__.
由于__getattr__可以进行任意计算以满足属性请求,并且可以AttributeError为其无法处理的名称引发,因此无法从外部列出所有可用的属性.
好一个。Dir() 确实可以正确运行并且行为是可以解释的。
位置是 currentTrack 的一个属性,但只能通过 currentTrack._prop_map_get_ 访问。可调用的 _prop_map_get_ 列在 dir(currentTrack) 中。请参阅getattr这是如何映射到 currentTrack._prop_map_get_
你会在 win32com 中找到各种这样的情况,它是一个包装器。