文章标签 ‘python’

昨天晚上写python代码,写到很晚,一直到今天早上。这期间我都在纠结一个问题,那就是GAE的webapp.RequestHandler类到底是怎么抽风了,总是出现莫名奇妙的错误,现在我总算是理清楚头绪了。把思想过程记录下来吧。 首先,定义一个类,class BaseRequestHandler(webapp.RequestHandler),这个是所有的RequestHandler的父类,因为它把一些基本的的处理已经做好了,它的子类就不需要重新处理了。 接下来,我又定义了一个子类,class Home(BaseRequestHandler),然后给它一个__init__方法,def __init__(self)。其实我想让Home只有这么一个方法,其它的让它的父类都定义好。但是问题来了,那就是没有__init__还好,有了之后服务器就出现了问题了。trace说Home没有response属性,我查了一下,一直查到库,查到了,发现webapp.RequestHandler根本没有__init__这个方法,它只有一个initialize方法,里面定义了self.response属性。 这下我就纠结了,我一直继承下来,按理说Home应该也有initialize这个方法的啊,这样它就有了self.response的属性了。但是怎么调试都出错,除非去掉__init__方法。这里看来,很可能是没运行initialize这个方法了。 但是为什么有了__init__就不运行initialize()了呢?我还去网上找了好久__init__和initialize的关系。当然,最后都以失败告终。 最后,实在受不了了,去看了库里的webapp.WSGIApplication的源代码,发现它是运行handler的initialize方法的,这样这个handler就有了response属性了。 这样就比较清楚了,但是当时我一直一位我定义的Home没有initialize这个方法,因为它没有response属性。现在看来,是当时想错了。Home有initialize方法来初始化self.response和self.request属性的。但是它的__init__方法首先就调用了self.response属性来赋值,而且还是Home在被引用或者或者调用的时候就运行。这个时候webapp.WSGIApplication还没有初始化initialize。 说的很不清楚,但是,留着以后看就行了。 总结:最关键的是没有搞懂python的运行机制,如果了解了这些规律,就不怕出现一些让人摸不着头脑的问题了。

2009年11月6日00:24 | 没有评论
分类: 编程
标签:

今天写代码。 发现关于python的self定义又不记得了。 于是于网上搜了一下,没去官网看文档,就是看了些代码。 发现python的self很有意思。 首先,self不是必须的,你可以定义成this,或者是other,反正是任何你想要的。 其次,在实例中,也就是class的instances中,是没有self这种字眼的。在subclass中有可能会出现。 一个class,在__init__()中定义self字眼,比如 def __init__(this),以后实例化这个class的时候就没有self等参数了。而this就代表了self,以后该class中所有的方法,属性,都用this,而不是self了。哈哈,很有意思的吧。 还有一点,也是搜到的。就是self的作用。 大概分为三步。 首先,解释器遇见实例,就调用它的方法或者属性。 其实,实例找到它的类,给它一个reference,这个reference在实例化的时候是__init__()的第一个参数,可以是self,也可以是自己定义的this等等。 最后,类根据这个reference,找到属性或者方法(找到的方法必须是第一个参数为reference的,找到的属性也必须有reference前缀),返回。 这个是老外写的,大概翻译就是上面的这三步了,有点纠结。 实在纠结就看这里:http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm 当然,如果实在是不想用__init__和self这种reference的话,那就不用好了。比如 class c: a=1 b=2 然后在命令行可以调用c.a和c.b 实例化可以这样 e=c 或者 e=c(),e.a和e.b也可以调用。 至于方法,貌似是没有self就废掉了。

2009年11月5日04:03 | 没有评论
分类: 编程
标签:

发现一篇强文,先弄个链接,有时间DIY一下,嘿嘿。 源文:http://blog.lazytech.info/2008/11/05/python-fetion/

2009年10月13日07:32 | 没有评论
分类: Linux, 编程
标签: