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 del()函数用法
Mar 24 Python
python插入数据到列表的方法
Apr 30 Python
Python的迭代器和生成器
Jul 29 Python
Python中属性和描述符的正确使用
Aug 23 Python
python去除字符串中的换行符
Oct 11 Python
详解python的ORM中Pony用法
Feb 09 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
python如何变换环境
Jul 21 Python
python破解同事的压缩包密码
Oct 14 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
PHP的宝库目录--PEAR
2006/10/09 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
php之XML转数组函数的详解
2013/06/07 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
python实现媒体播放器功能
2018/02/11 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
python实现简单加密解密机制
2019/03/19 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
简单了解django文件下载方式
2020/02/10 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
心得体会开头
2014/01/01 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
个人整改措施书面材料
2014/10/24 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL