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中利用sorted()函数排序的简单教程
Apr 27 Python
在Python中处理XML的教程
Apr 29 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 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实现文件上传二法
2006/10/09 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
PHP源码之explode使用说明
2011/08/05 PHP
浅析php创建者模式
2014/11/25 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
js操作select控件的几种方法
2010/06/02 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
Three.js基础部分学习
2017/01/08 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
在Docker上开始部署Python应用的教程
2015/04/17 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
浅析python标准库中的glob
2020/03/13 Python
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
超市中秋节促销方案
2014/03/21 职场文书
反邪教警示教育方案
2014/05/13 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
教师岗位说明书
2015/09/30 职场文书