Sikuli:截图也能编程

标签:Python

前几天在cnBeta看到一个使用截图来编程的新语言:Sikuli。不过没放出地址,我也懒得去看。

今天在Google Groups的Python论坛里看到有人说Sikuli是他见过最酷的项目,于是点了进去,看了首页的一段youtube演示视频,才发现这就是前几天看到的那个。

不过与其说是语言,不如说是一个工具或库。它是用Jython实现的,可以使用Jython的API,而最强大的功能就是识别截图了。只是感觉不像cnBeta上吹得那么强大,充其量就是一个加强版的按键精灵…

动态设置变量名

标签:Python

如果要写一个程序,让x1为1,x2为2,然后直到x100为100,你会怎么做?

在C这种静态语言里,变量名这个标识符实际上会被编译器直接翻译成内存地址,所以除了手动设置每个变量的值以外,没办法做到这点。而Python这种动态语言则是可以做到的。

最容易想到的自然是eval,但是实际上根本不需要这种危险的东西,因为Python的变量名就是一个字典的key而已。要获取这个字典,直接用locals和globals函数即可。

避免ReferenceProperty自动解引用

标签:Google App Engine, Python

刚才在GAE论坛看到这样一个问题:
一个模型里有一个引用属性(ReferenceProperty)。获取完实体集后,想要通过该引用属性来获取指向的实体。
重点是ReferenceProperty会自动解引用,访问它时会自动查询数据库,这样就会造成多次数据库访问,而不能用gb.get()来一次获取。

当工厂方法遇到静态方法

标签:Java, Python, 设计模式

项目中遇到个问题,虽然还没和别人沟通过,不过先记录一下自己的想法吧。
在第一阶段的开发中,我们只针对美国和加拿大;现在要开始第二阶段的开发了,需要面向欧洲6国;而第三阶段则要面向亚洲。
问题是每个国家除了语言不一样,连逻辑都不一样,于是调用类的逻辑就得改了。简单来说就是要针对不同的国家,调用不同的类。

最容易想到的方法就是使用工厂方法模式:传递国家名,找到对应的类,再调用该类的方法。
可是被调用的方法不是实例方法,而是静态方法,这就导致了不能通过构造一个子类对象,转换成抽象基类的对象来调用该静态方法,因为调用静态方法时不会调用子类的方法。

« 看看还有什么好玩意