python新技能get——看!源!码!

  上节课一起看了一下ThreadingTCPserver和tornado的源码,真是心力交瘁。。。后来仔细的想了一下,看懂源码其实并不难,只是需要明确一些以前我们学习过但是却容易被忽视的概念!

再看继承

  真正的大餐来之前,还是来点儿开胃菜!回顾一下关于类的继承的知识:

    

  我们先看上面的代码,这是一个简单的类继承,我们可以看到父类Base和子类Son,它们中各有一个Testfunc方法,当我们实例化子类的对象sonobj时,可以看到初始化方法中黄色框框调用了Testfunc,那么这个时候执行的是哪个类里面的代码呢?我会告诉你执行的是子类里面的方法,不信就自己试试吧,代码在下面~

  为什么呢?其实这里是绕了一个圈,所以把很多人绕晕了,包括我!后来想想其实很容易,我们看最右边的图:

  如果这样看,我们是不是就明白了?其实这两段代码表示的是一个意思,尽管Son继承了Base类,父子类中都有同样的方法,但是由于我们实例化了子类的对象,所以这个在初始化方法里的self.Testfunc,self指的是子类的对象,当然也就先调用子类中的方法啦。所以尽管在第一个例子中,初始化方法在父类执行,但是还是改变不了它是子类对象的本质,当我们使用self去调用Testfunc方法时,始终是先调用子类的方法。我们可以这样理解,尽管儿子继承了父亲的财产,但是花钱的时候,还是要先花自己的~~~

 1 #_*_coding:utf-8_*_
 2 __author__ = ‘Eva_J‘
 3 class Base(object):
 4     def __init__(self,name):
 5         self.name = name
 6         self.Testfunc()
 7
 8     def Testfunc(self):
 9         print ‘do Base Testfunc‘
10
11 class Son(Base):
12     def Testfunc(self):
13         print ‘do Son Testfunc‘
14
15 sonobj = Son(‘sonobj‘)

inherit Code

看完刚刚的代码,我们就知道了对象和self的真实意义,现在再来回忆一下关于继承的顺序问题:    

       

   看上面的代码,我们猜测一下,执行之后,控制台会打印什么呢?先揭晓答案,会打印Base2方法中的内容,原因很简单:尽管这三个类中都有同样的Testfunc方法,但是,由于计算机在找方法的时候,遵循的顺序是:Base2,Son,Base,所以它会先找到Base2类,而这个类中刚好有它要找的方法,它也就欢欢喜喜的拿去执行啦!

 1 #_*_coding:utf-8_*_
 2 __author__ = ‘Eva_J‘
 3 class Base(object):
 4     def Testfunc(self):
 5         print ‘do Base Testfunc‘
 6
 7 class Son(Base):
 8     def __init__(self,name):
 9         self.name = name
10         self.Testfunc()
11
12     def Testfunc(self):
13         print ‘do Son Testfunc‘
14
15 class Base2(object):
16     def Testfunc(self):
17         print ‘do Base2 Testfunc‘
18
19 class GrandSon(Base2,Son):
20     pass
21
22 #sonobj = Son(‘sonobj‘)
23 sonobj = GrandSon(‘sonobj‘)

inherit2 Code

画个简易类图

  刚刚我们只是写了一个小程序,来说明类之间的继承和对象调用方法之间的联系,但是如果我们想要hold住一个继承关系复杂的源码逻辑,就需要类图来帮忙!如果你觉得我要教你画类图那就大错特错了。。。懒人症重症患者是懒得画那种东西的。。。嘻,先看图!

对照类图看源码

  根据上面的图,我们就拿到了threadingTCPServer的相关类,并且搞清楚了它们之间的继承关系和方法,接下来我们对照这张简易类图来看看代码执行的过程:

  初始化相关过程:

 

  执行serve_forever的相关代码:

  就是这样,我们一路按照调用轨迹去寻找,每次看到一个调用都先对照上面的简易类图,看看有没有重名方法,如果有,就要找到最近的方法并查看里面的内容,以此类推:按照这种方法,就会感觉所有代码都在一个文件一样,妈妈再也不用担心我看不懂源码,哈!!!当然啦,这种方法比较山寨,自己心里知道就好,不要告诉别人你其实是这样看懂源码的~~~

时间: 2024-08-28 23:18:11

python新技能get——看!源!码!的相关文章

Android NoHttp 框架作者带你看源码(一)

版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 现在市场的Http框架很多,比如我们熟知的NoHttp.Retrofit.Volley.android-async-http等上层框架,HttpURLConnection.OkHttp.HttpClient等底层框架,今天不说孰好孰坏,今天我带大家来分析NoHttp的源码,教大家如何来看NoHttp的源码. 今天我们由浅到深,深入浅出的分析第一个模块:请求模块. 支持作者可以去G

新大番薯棋牌牛牛源码安装搭建 微信h5牛牛大厅开发选择方式

一个完整的客户端棋牌游戏从结构上包括了游戏.游戏大厅.游戏网站.客户端等部分,如果把做棋牌游戏比作建房子,那打造一个自己的棋牌之家就得经过前期的规划设计,中期的建筑施工,后期的装修设计等环节,有的人建房子可能会亲力亲为,有的人为了省钱而去购买小产权房或二手房,更多的人则选择开发商购买商品房.本质上,做棋牌游戏基本也是如此,无论个人还是团队企业,在当前日渐成熟的网络棋牌游戏市场,新大番薯棋牌牛牛源码安装搭建(h5.maliwl.com) 微信h5牛牛大厅开发选择方式   ,要想涉足无非也是以下这几

FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决

1:感觉见鬼了一般存储JSONObject中的字段竟然不见了? JSONObject object=new JSONObject(); Map fields = new HashMap(); fields.put("1","1"); object.put("fields",fields); System.out.println(object.toString()); JSONObject newFields = object.getJSONObj

P8架构师倾情讲述,看源码是Java高级程序员内功修炼必经之路

笔者前两天总结了一些Java程序员进阶必备的技术要点,并且做出了分享,可以参见前篇文章< Java程序员年薪40W,他1年走了别人5年的路(技术提炼建议收藏) >. 今天笔者在这里给大家介绍一下程序员的内功,内功修炼的内容就与之前文章中的技术内容大致相似,但是,那些技术不是说你想学就能学会的,如果你只是写了几年的业务代码,不对源码加以分析,那么你永远只是停留在码农阶段.你必须要学会看懂代码,才能尝试在架构技术上加深造诣,架构师之所以称之为架构师,源于他们对源码透彻的理解. 首先先为大家介绍一下

Eclipse项目里面看源码和文档

Eclipse项目里面看源码 1.新建项目列表 2.进入struts2-core-2.3.20.jar,双击之后,看不到源码 3.右键struts2-core-2.3.20.jar,选择properties,在里面设置源码路径. 我的路径为:  E:\struts-2.3.20\src\core\src\main\java 4.之后查看,源码出来了. 5.注意事项: 如果在struts-2.3.20-all.zip解压的包里看不到,可以去官网自己从新下载一个源码包,选择这个struts-2.3.

80个Python经典资料(教程+源码+工具)汇总——下载目录 ...

原文转自:http://bbs.51cto.com/thread-935214-1.html 大家好,51CTO下载中心根据资料的热度和好评度收集了80个Python资料,分享给Python开发的同学.内容包括1个Python专题.66个学习资料.7套Python源码和6个相关软件.附件较多,无法一一分享,在此大家整理一个下载目录了,可以保存以备后用,需要时可选择性下载. 附件下载地址:http://down.51cto.com/data/432858 附件内容部分预览: [专题推荐]Pytho

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二)

NoHttp和OkHttp的无缝结合 NoHttp框架作者带你看源码(二) 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 上一次带大家分析了NoHttp源码,知道我们可以替换NoHttp的底层为其他任何库,例如OkHttp.HttpURLConnection.HttpClient,那今天就带领大家一步步来实现替换NoHttp的底层为OkHttp. NoHttp源码分析的博客:http://blog.csdn.net/yanz

Spring AOP源码解析——专治你不会看源码的坏毛病!

昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些. 原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们,不想这么远行吗?看看何洁,看看带着俩娃跳楼的妈妈. 所以现在的女孩子是很明白的,有些男孩子个子不高,其貌不扬,但是一看那人品气质就知道能找个不错的女盆友.不过要说看人的技术能力,男孩子确实更胜一筹,咱得努力了. 总结一下要形成的习惯: 有空时隔一段时间要做几道算法题,C语言和JAVA都可以,主要是训

Mybatis还有这种操作?浅析为什么要看源码

很多人都有一个疑惑,为什么面试都喜欢问原理,问源码.但是实际工作根本用不上,也就是大家常说的,面试造火箭,进去拧螺丝.我身边也有不少朋友问过我,我给他们的回答是.如果不看源码,不懂原理,出了问题你怎么解决?他们给我的答复基本都是两个字:"搜索". 也确实,工作中大部分问题通过复制错误信息搜索都能解决,加上现在框架越来越多,拼积木式的编程方式加上搜索引擎,让越来越多人产生了开发是件很容易的事的错觉.我也一直想举一个搜索几乎搜不到,要看源码才能弄懂其中缘由的例子. 正巧这件事发生在了去年8