如何同时获取多个属性?
我在一个项目中使用了Appscript,这是一个让Python可以和AppleScript对接的工具,主要是用来从Mac应用程序获取数据。
下面是一个示例代码:
asobj = app('Things').to_dos()[0]
self.id = asobj.id()
self.name = asobj.name()
self.status = asobj.status()
每次调用属性(比如id、name、status)时,都会进行进程间的调用,所以速度比较慢……尤其是当你需要处理成千上万个对象的时候。
有没有办法通过AppleScript的Python接口(appscript)一次性获取多个属性呢?
2 个回答
0
如果你有很多元素,像这样获取它们的属性会更快:
ref = app('Things').to_dos
ids = ref.id()
names = ref.name()
statuses = ref.status()
然后可以使用Python的zip()函数来按需要重新排列这些属性。appscript的文档里有一章专门讲优化技巧,里面会更详细地解释这个过程。
如果你还没有的话,建议你从appscript网站上下载ASDictionary和ASTranslate工具。ASTranslate可以帮助你把应用程序的命令从AppleScript转换成appscript的语法。ASDictionary可以以appscript风格的格式导出应用程序字典,还能启用appscript内置的help()方法,让你可以互动式地探索应用程序字典(这比使用dir()要强大得多)。
3
我不太确定在Python中怎么表达这个,但大多数AppleScript对象都有一个叫“properties”的属性,这个属性会返回一个字典,里面包含了这个对象支持的每个属性的键值对。我猜如果你调用 asobj.properties()
,会得到一个合适的数据结构,然后你就可以从中获取你想要的任何单独属性。