再看继承

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

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

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

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

#_*_coding:utf-8_*_

classBase(object):def __init__(self,name):

self.name=name

self.Testfunc()defTestfunc(self):print('do Base Testfunc')classSon(Base):defTestfunc(self):print('do Son Testfunc')

sonobj= Son('sonobj')

inherit Code

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

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

#_*_coding:utf-8_*_

classBase(object):defTestfunc(self):print('do Base Testfunc')classSon(Base):def __init__(self,name):

self.name=name

self.Testfunc()defTestfunc(self):print('do Son Testfunc')classBase2(object):defTestfunc(self):print('do Base2 Testfunc')classGrandSon(Base2,Son):pass

#sonobj = Son('sonobj')

sonobj = GrandSon('sonobj')

inherit2 Code

画个简易类图

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

对照类图看源码

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

初始化相关过程:

执行serve_forever的相关代码:

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

python3 socketserver源码解析_解读python中SocketServer源码相关推荐

  1. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  2. python3socket非阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

  3. pythontcp服务器如何关闭阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信...

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

  4. python xml快速解析_在Python中使用Expat进行快速XML解析

    Python允许通过其内置模块expat读取和处理XML数据.它是一个非验证XML解析器.它创建一个XML解析器对象,并将其对象的属性捕获到各种处理程序函数中.在下面的示例中,我们将看到各种处理程序函 ...

  5. python中degree什么意思_解读Python中degrees()方法的使用

    degrees()方法从弧度转换到度角x 语法 以下是degrees()方法的语法: degrees(x) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调 ...

  6. python3socket非阻塞在linux里无效_利用Python中SocketServer实现客户端与服务器间非阻塞通信方法介绍...

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in) ...

  7. 轻触开源(三)-Gson项目源码解析_贰

    2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:https://my.oschina.net/u/874727/blog/750473 Q:102525062 ...

  8. python中superclass是什么_深度解析并实现python中的super(转载,好文)

    大神半个月的成绩,让我看的叹为观止,建议看原帖地址,会让你对Python的描述符有更强的认识. 原文链接:https://blog.csdn.net/zhangjg_blog/article/deta ...

  9. python方法_详细解读Python中的__init__()方法

    __init__()方法意义重大的原因有两个.第一个原因是在对象生命周期中初始化是最重要的一步:每个对象必须正确初始化后才能正常工作.第二个原因是__init__()参数值可以有多种形式. 因为有很多 ...

最新文章

  1. C#把数据写到硬盘指定位置
  2. 【Android工具】更新安卓手机传感器信息获取工具Ampere Castro phyphox,轻松获取硬件数据和状态信息...
  3. VC++连接远程Oracle数据库
  4. nyist-508(余数求和)
  5. 带有ActiveMQ和Maven的JMS Sender应用程序
  6. CCIE-LAB-SDN-第一篇-修改交换机管理IP
  7. k-Means——经典聚类算法实验(Matlab实现)
  8. 问题解决 | maven包冲突了怎么办,这款插件你不容错过
  9. ASP.NET中的HTTP模块和处理程序
  10. BootStrap的介绍与案例使用
  11. [分享]Java 线程池的原理与实现
  12. PBRT的scene.pbrt使用方法
  13. IT人员必学最基础知识(一)——总括
  14. c#使用word、excel、pdf ——转
  15. vector初始化与清空
  16. hdoj-2567 寻梦
  17. docker + nginx + uwsgi + ubuntu部署django项目
  18. 信息系统安全期末复习笔记
  19. 非常简洁的vsPlayAudio在线音乐播放器插件
  20. 从游戏到赚钱,区块链如何改变电子游戏的面貌?

热门文章

  1. jeecgboot配置文件_Jeecg-Boot 技术文档
  2. android 自动截图分享,Android截图和分享
  3. B2.Java代码查错
  4. 无心剑中译马塞尔·普鲁斯特《追忆似水年华》
  5. 英语学习笔记2019-11-29
  6. TF1与TF2的求和程序对比
  7. 【codevs1935】【BZOJ2879】美食节,网络流之动态加点
  8. android fragment 教程,Android Fragment教程总结
  9. idea @value提示_IDEA 中springboot 项目使用 注解Autowired 出现红线
  10. php 创建目录_使用 Zephir 轻松构建 PHP 扩展