python SocketServer源码深入解读


Posted in Python onSeptember 17, 2019

再看继承

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

python SocketServer源码深入解读

python SocketServer源码深入解读

python SocketServer源码深入解读

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

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

如果这样看,我们是不是就明白了?其实这两段代码表示的是一个意思,尽管Son继承了Base类,父子类中都有同样的方法,但是由于我们实例化了子类的对象,所以这个在初始化方法里的self.Testfunc,self指的是子类的对象,当然也就先调用子类中的方法啦。

所以尽管在第一个例子中,初始化方法在父类执行,但是还是改变不了它是子类对象的本质,当我们使用self去调用Testfunc方法时,始终是先调用子类的方法。我们可以这样理解,尽管儿子继承了父亲的财产,但是花钱的时候,还是要先花自己的~~~

#_*_coding:utf-8_*_
__author__ = 'Eva_J'
class Base(object):
  def __init__(self,name):
    self.name = name
    self.Testfunc()
  def Testfunc(self):
    print 'do Base Testfunc'
class Son(Base):
  def Testfunc(self):
    print 'do Son Testfunc'
sonobj = Son('sonobj')
inherit Code

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

python SocketServer源码深入解读

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

#_*_coding:utf-8_*_
__author__ = 'Eva_J'
class Base(object):
  def Testfunc(self):
    print 'do Base Testfunc'
class Son(Base):
  def __init__(self,name):
    self.name = name
    self.Testfunc()
  def Testfunc(self):
    print 'do Son Testfunc'
class Base2(object):
  def Testfunc(self):
    print 'do Base2 Testfunc'
class GrandSon(Base2,Son):
  pass
#sonobj = Son('sonobj')
sonobj = GrandSon('sonobj')
inherit2 Code

画个简易类图

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

python SocketServer源码深入解读

对照类图看源码

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

初始化相关过程:

python SocketServer源码深入解读

执行serve_forever的相关代码:

python SocketServer源码深入解读

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python全局变量用法实例分析
Jul 19 Python
python分割列表(list)的方法示例
May 07 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
python 内置函数汇总详解
Sep 16 Python
python将时分秒转换成秒的实例
Dec 07 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python3实现简单飞机大战
Nov 29 Python
Python @property使用方法解析
Sep 17 #Python
Python爬取知乎图片代码实现解析
Sep 17 #Python
Python读写文件模式和文件对象方法实例详解
Sep 17 #Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 #Python
Python使用random模块生成随机数操作实例详解
Sep 17 #Python
python同时替换多个字符串方法示例
Sep 17 #Python
python 函数的缺省参数使用注意事项分析
Sep 17 #Python
You might like
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP 编写大型网站问题集
2010/05/07 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python易忽视知识点小结
2015/05/25 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Python的标准模块包json详解
2017/03/13 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python list多级排序知识点总结
2019/10/23 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
加拿大探亲邀请信
2014/01/28 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
创业计划书之书店
2019/09/10 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python